moz-firefox下添加IE方法和属性的方案

2019-04-04 07:58:40来源:爱站网 阅读 ()

新老客户大回馈,云服务器低至5折

IECN中,我看到了新云关于交换选择的JS,因为removenode和swapnode,它在firefox下是无效的。其实我们可以通过定制原型来修改属性和方法,这些属性和方法只在IE下有效,那么moz-firefox下添加IE方法和属性的方案有哪些呢?下面就让爱站技术频道小编带你一起进入下文了解一下吧!


修改方案如下:

<script?language="javascript"?type="text/javascript">
<!--
if(window.Event){//?修正Event的DOM
????/*
????????????????????????????????IE5????????MacIE5????????Mozilla????????Konqueror2.2????????Opera5
????event????????????????????????yes????????yes????????????yes????????????yes????????????????????yes
????event.returnValue????????????yes????????yes????????????no????????????no????????????????????no
????event.cancelBubble????????????yes????????yes????????????no????????????no????????????????????no
????event.srcElement????????????yes????????yes????????????no????????????no????????????????????no
????event.fromElement????????????yes????????yes????????????no????????????no????????????????????no

????*/
????Event.prototype.__defineSetter__("returnValue",function(b){//?
????????if(!b)this.preventDefault();
????????return?b;
????????});
????Event.prototype.__defineSetter__("cancelBubble",function(b){//?设置或者检索当前事件句柄的层次冒泡
????????if(b)this.stopPropagation();
????????return?b;
????????});
????Event.prototype.__defineGetter__("srcElement",function(){
????????var?node=this.target;
????????while(node.nodeType!=1)node=node.parentNode;
????????return?node;
????????});
????Event.prototype.__defineGetter__("fromElement",function(){//?返回鼠标移出的源节点
????????var?node;
????????if(this.type=="mouseover")
????????????node=this.relatedTarget;
????????else?if(this.type=="mouseout")
????????????node=this.target;
????????if(!node)return;
????????while(node.nodeType!=1)node=node.parentNode;
????????return?node;
????????});
????Event.prototype.__defineGetter__("toElement",function(){//?返回鼠标移入的源节点
????????var?node;
????????if(this.type=="mouseout")
????????????node=this.relatedTarget;
????????else?if(this.type=="mouseover")
????????????node=this.target;
????????if(!node)return;
????????while(node.nodeType!=1)node=node.parentNode;
????????return?node;
????????});
????Event.prototype.__defineGetter__("offsetX",function(){
????????return?this.layerX;
????????});
????Event.prototype.__defineGetter__("offsetY",function(){
????????return?this.layerY;
????????});
????}
if(window.Document){//?修正Document的DOM
????/*
????????????????????????????????IE5????????MacIE5????????Mozilla????????Konqueror2.2????????Opera5
????document.documentElement????yes????????yes????????????yes????????????yes????????????????????no
????document.activeElement????????yes????????null????????no????????????no????????????????????no

????*/
????}
if(window.Node){//?修正Node的DOM
????/*
????????????????????????????????IE5????????MacIE5????????Mozilla????????Konqueror2.2????????Opera5
????Node.contains????????????????yes????????yes????????????no????????????no????????????????????yes
????Node.replaceNode????????????yes????????no????????????no????????????no????????????????????no
????Node.removeNode????????????????yes????????no????????????no????????????no????????????????????no
????Node.children????????????????yes????????yes????????????no????????????no????????????????????no
????Node.hasChildNodes????????????yes????????yes????????????yes????????????yes????????????????????no
????Node.childNodes????????????????yes????????yes????????????yes????????????yes????????????????????no
????Node.swapNode????????????????yes????????no????????????no????????????no????????????????????no
????Node.currentStyle????????????yes????????yes????????????no????????????no????????????????????no

????*/
????Node.prototype.replaceNode=function(Node){//?替换指定节点
????????this.parentNode.replaceChild(Node,this);
????????}
????Node.prototype.removeNode=function(removeChildren){//?删除指定节点
????????if(removeChildren)
????????????return?this.parentNode.removeChild(this);
????????else{
????????????var?range=document.createRange();
????????????range.selectNodeContents(this);
????????????return?this.parentNode.replaceChild(range.extractContents(),this);
????????????}
????????}
????Node.prototype.swapNode=function(Node){//?交换节点
????????var?nextSibling=this.nextSibling;
????????var?parentNode=this.parentNode;
????????node.parentNode.replaceChild(this,Node);
????????parentNode.insertBefore(node,nextSibling);
????????}
????}
if(window.HTMLElement){
????HTMLElement.prototype.__defineGetter__("all",function(){
????????var?a=this.getElementsByTagName("*");
????????var?node=this;
????????a.tags=function(sTagName){
????????????return?node.getElementsByTagName(sTagName);
????????????}
????????return?a;
????????});
????HTMLElement.prototype.__defineGetter__("parentElement",function(){
????????if(this.parentNode==this.ownerDocument)return?null;
????????return?this.parentNode;
????????});
????HTMLElement.prototype.__defineGetter__("children",function(){
????????var?tmp=[];
????????var?j=0;
????????var?n;
????????for(var?i=0;i<this.childNodes.length;i++){
????????????n=this.childNodes[i];
????????????if(n.nodeType==1){
????????????????tmp[j++]=n;
????????????????if(n.name){
????????????????????if(!tmp[n.name])
????????????????????????tmp[n.name]=[];
????????????????????tmp[n.name][tmp[n.name].length]=n;
????????????????????}
????????????????if(n.id)
????????????????????tmp[n.id]=n;
????????????????}
????????????}
????????return?tmp;
????????});
????HTMLElement.prototype.__defineGetter__("currentStyle",?function(){
????????return?this.ownerDocument.defaultView.getComputedStyle(this,null);
????????});
????HTMLElement.prototype.__defineSetter__("outerHTML",function(sHTML){
????????var?r=this.ownerDocument.createRange();
????????r.setStartBefore(this);
????????var?df=r.createContextualFragment(sHTML);
????????this.parentNode.replaceChild(df,this);
????????return?sHTML;
????????});
????HTMLElement.prototype.__defineGetter__("outerHTML",function(){
????????var?attr;
????????var?attrs=this.attributes;
????????var?str="<"+this.tagName;
????????for(var?i=0;i<attrs.length;i++){
????????????attr=attrs[i];
????????????if(attr.specified)
????????????????str+="?"+attr.name+'="'+attr.value+'"';
????????????}
????????if(!this.canHaveChildren)
????????????return?str+">";
????????return?str+">"+this.innerHTML+"</"+this.tagName+">";
????????});
????HTMLElement.prototype.__defineGetter__("canHaveChildren",function(){
????????switch(this.tagName.toLowerCase()){
????????????case?"area":
????????????case?"base":
????????????case?"basefont":
????????????case?"col":
????????????case?"frame":
????????????case?"hr":
????????????case?"img":
????????????case?"br":
????????????case?"input":
????????????case?"isindex":
????????????case?"link":
????????????case?"meta":
????????????case?"param":
????????????????return?false;
????????????}
????????return?true;
????????});

????HTMLElement.prototype.__defineSetter__("innerText",function(sText){
????????var?parsedText=document.createTextNode(sText);
????????this.innerHTML=parsedText;
????????return?parsedText;
????????});
????HTMLElement.prototype.__defineGetter__("innerText",function(){
????????var?r=this.ownerDocument.createRange();
????????r.selectNodeContents(this);
????????return?r.toString();
????????});
????HTMLElement.prototype.__defineSetter__("outerText",function(sText){
????????var?parsedText=document.createTextNode(sText);
????????this.outerHTML=parsedText;
????????return?parsedText;
????????});
????HTMLElement.prototype.__defineGetter__("outerText",function(){
????????var?r=this.ownerDocument.createRange();
????????r.selectNodeContents(this);
????????return?r.toString();
????????});
????HTMLElement.prototype.attachEvent=function(sType,fHandler){
????????var?shortTypeName=sType.replace(/on/,"");
????????fHandler._ieEmuEventHandler=function(e){
????????????window.event=e;
????????????return?fHandler();
????????????}
????????this.addEventListener(shortTypeName,fHandler._ieEmuEventHandler,false);
????????}
????HTMLElement.prototype.detachEvent=function(sType,fHandler){
????????var?shortTypeName=sType.replace(/on/,"");
????????if(typeof(fHandler._ieEmuEventHandler)=="function")
????????????this.removeEventListener(shortTypeName,fHandler._ieEmuEventHandler,false);
????????else
????????????this.removeEventListener(shortTypeName,fHandler,true);
????????}
????HTMLElement.prototype.contains=function(Node){//?是否包含某节点
????????do?if(Node==this)return?true;
????????while(Node=Node.parentNode);
????????return?false;
????????}
????HTMLElement.prototype.insertAdjacentElement=function(where,parsedNode){
????????switch(where){
????????????case?"beforeBegin":
????????????????this.parentNode.insertBefore(parsedNode,this);
????????????????break;
????????????case?"afterBegin":
????????????????this.insertBefore(parsedNode,this.firstChild);
????????????????break;
????????????case?"beforeEnd":
????????????????this.appendChild(parsedNode);
????????????????break;
????????????case?"afterEnd":
????????????????if(this.nextSibling)
????????????????????this.parentNode.insertBefore(parsedNode,this.nextSibling);
????????????????else
????????????????????this.parentNode.appendChild(parsedNode);
????????????????break;
????????????}
????????}
????HTMLElement.prototype.insertAdjacentHTML=function(where,htmlStr){
????????var?r=this.ownerDocument.createRange();
????????r.setStartBefore(this);
????????var?parsedHTML=r.createContextualFragment(htmlStr);
????????this.insertAdjacentElement(where,parsedHTML);
????????}
????HTMLElement.prototype.insertAdjacentText=function(where,txtStr){
????????var?parsedText=document.createTextNode(txtStr);
????????this.insertAdjacentElement(where,parsedText);
????????}
????HTMLElement.prototype.attachEvent=function(sType,fHandler){
????????var?shortTypeName=sType.replace(/on/,"");
????????fHandler._ieEmuEventHandler=function(e){
????????????window.event=e;
????????????return?fHandler();
????????????}
????????this.addEventListener(shortTypeName,fHandler._ieEmuEventHandler,false);
????????}
????HTMLElement.prototype.detachEvent=function(sType,fHandler){
????????var?shortTypeName=sType.replace(/on/,"");
????????if(typeof(fHandler._ieEmuEventHandler)=="function")
????????????this.removeEventListener(shortTypeName,fHandler._ieEmuEventHandler,false);
????????else
????????????this.removeEventListener(shortTypeName,fHandler,true);
????????}
????}
//-->
</script>

以上代码都是爱站技术频道小编为大家搜集的moz-firefox下添加IE方法和属性的方案,希望对大家的学习有一定的帮助,感谢大家继续支持爱站技术频道!


原文链接:https://js.aizhan.com/develop/JavaScript/5156.html
如有疑问请与原作者联系

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:原型方法的不同写法居然会影响调试的解决方法

下一篇:js判断浏览器的代码