手机
当前位置:查字典教程网 >编程开发 >Javascript教程 >统一接口:为FireFox添加IE的方法和属性的js代码
统一接口:为FireFox添加IE的方法和属性的js代码
摘要:如何在Z-Blog中运行代码(纯JS版)一文中由于FF不支持insertAdjacentElement,造成无法显示“运行代码”链接。今天G...

如何在Z-Blog中运行代码(纯JS版)一文中由于FF不支持insertAdjacentElement,造成无法显示“运行代码”链接。今天Google了一下,发现一篇好文,将下面的脚本存成iedom4moz.js文件,每页调用——OK,一切搞定!独乐乐,不如众乐乐,分享给诸位了^_^

复制代码 代码如下:

//JavaScriptDocument

//统一接口:为FireFox添加IE的方法和属性

if(window.Event){//修正Event的DOM

/*

IE5MacIE5MozillaKonqueror2.2Opera5

eventyesyesyesyesyes

event.returnValueyesyesnonono

event.cancelBubbleyesyesnonono

event.srcElementyesyesnonono

event.fromElementyesyesnonono

*/

Event.prototype.__defineSetter__("returnValue",function(b){//

if(!b)this.preventDefault();

returnb;

});

Event.prototype.__defineSetter__("cancelBubble",function(b){//设置或者检索当前事件句柄的层次冒泡

if(b)this.stopPropagation();

returnb;

});

Event.prototype.__defineGetter__("srcElement",function(){

varnode=this.target;

while(node.nodeType!=1)node=node.parentNode;

returnnode;

});

Event.prototype.__defineGetter__("fromElement",function(){//返回鼠标移出的源节点

varnode;

if(this.type=="mouseover")

node=this.relatedTarget;

elseif(this.type=="mouseout")

node=this.target;

if(!node)return;

while(node.nodeType!=1)node=node.parentNode;

returnnode;

});

Event.prototype.__defineGetter__("toElement",function(){//返回鼠标移入的源节点

varnode;

if(this.type=="mouseout")

node=this.relatedTarget;

elseif(this.type=="mouseover")

node=this.target;

if(!node)return;

while(node.nodeType!=1)node=node.parentNode;

returnnode;

});

Event.prototype.__defineGetter__("offsetX",function(){

returnthis.layerX;

});

Event.prototype.__defineGetter__("offsetY",function(){

returnthis.layerY;

});

}

if(window.Document){//修正Document的DOM

/*

IE5MacIE5MozillaKonqueror2.2Opera5

document.documentElementyesyesyesyesno

document.activeElementyesnullnonono

*/

}

if(window.Node){//修正Node的DOM

/*

IE5MacIE5MozillaKonqueror2.2Opera5

Node.containsyesyesnonoyes

Node.replaceNodeyesnononono

Node.removeNodeyesnononono

Node.childrenyesyesnonono

Node.hasChildNodesyesyesyesyesno

Node.childNodesyesyesyesyesno

Node.swapNodeyesnononono

Node.currentStyleyesyesnonono

*/

Node.prototype.replaceNode=function(Node){//替换指定节点

this.parentNode.replaceChild(Node,this);

}

Node.prototype.removeNode=function(removeChildren){//删除指定节点

if(removeChildren)

returnthis.parentNode.removeChild(this);

else{

varrange=document.createRange();

range.selectNodeContents(this);

returnthis.parentNode.replaceChild(range.extractContents(),this);

}

}

Node.prototype.swapNode=function(Node){//交换节点

varnextSibling=this.nextSibling;

varparentNode=this.parentNode;

node.parentNode.replaceChild(this,Node);

parentNode.insertBefore(node,nextSibling);

}

}

if(window.HTMLElement){

HTMLElement.prototype.__defineGetter__("all",function(){

vara=this.getElementsByTagName("*");

varnode=this;

a.tags=function(sTagName){

returnnode.getElementsByTagName(sTagName);

}

returna;

});

HTMLElement.prototype.__defineGetter__("parentElement",function(){

if(this.parentNode==this.ownerDocument)returnnull;

returnthis.parentNode;

});

HTMLElement.prototype.__defineGetter__("children",function(){

vartmp=[];

varj=0;

varn;

for(vari=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;

}

}

returntmp;

});

HTMLElement.prototype.__defineGetter__("currentStyle",function(){

returnthis.ownerDocument.defaultView.getComputedStyle(this,null);

});

HTMLElement.prototype.__defineSetter__("outerHTML",function(sHTML){

varr=this.ownerDocument.createRange();

r.setStartBefore(this);

vardf=r.createContextualFragment(sHTML);

this.parentNode.replaceChild(df,this);

returnsHTML;

});

HTMLElement.prototype.__defineGetter__("outerHTML",function(){

varattr;

varattrs=this.attributes;

varstr="<"+this.tagName;

for(vari=0;i<attrs.length;i++){

attr=attrs[i];

if(attr.specified)

str+=""+attr.name+'="'+attr.value+'"';

}

if(!this.canHaveChildren)

returnstr+">";

returnstr+">"+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":

returnfalse;

}

returntrue;

});

HTMLElement.prototype.__defineSetter__("innerText",function(sText){

varparsedText=document.createTextNode(sText);

this.innerHTML=parsedText;

returnparsedText;

});

HTMLElement.prototype.__defineGetter__("innerText",function(){

varr=this.ownerDocument.createRange();

r.selectNodeContents(this);

returnr.toString();

});

HTMLElement.prototype.__defineSetter__("outerText",function(sText){

varparsedText=document.createTextNode(sText);

this.outerHTML=parsedText;

returnparsedText;

});

HTMLElement.prototype.__defineGetter__("outerText",function(){

varr=this.ownerDocument.createRange();

r.selectNodeContents(this);

returnr.toString();

});

HTMLElement.prototype.attachEvent=function(sType,fHandler){

varshortTypeName=sType.replace(/on/,"");

fHandler._ieEmuEventHandler=function(e){

window.event=e;

returnfHandler();

}

this.addEventListener(shortTypeName,fHandler._ieEmuEventHandler,false);

}

HTMLElement.prototype.detachEvent=function(sType,fHandler){

varshortTypeName=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){//是否包含某节点

doif(Node==this)returntrue;

while(Node=Node.parentNode);

returnfalse;

}

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){

varr=this.ownerDocument.createRange();

r.setStartBefore(this);

varparsedHTML=r.createContextualFragment(htmlStr);

this.insertAdjacentElement(where,parsedHTML);

}

HTMLElement.prototype.insertAdjacentText=function(where,txtStr){

varparsedText=document.createTextNode(txtStr);

this.insertAdjacentElement(where,parsedText);

}

HTMLElement.prototype.attachEvent=function(sType,fHandler){

varshortTypeName=sType.replace(/on/,"");

fHandler._ieEmuEventHandler=function(e){

window.event=e;

returnfHandler();

}

this.addEventListener(shortTypeName,fHandler._ieEmuEventHandler,false);

}

HTMLElement.prototype.detachEvent=function(sType,fHandler){

varshortTypeName=sType.replace(/on/,"");

if(typeof(fHandler._ieEmuEventHandler)=="function")

this.removeEventListener(shortTypeName,fHandler._ieEmuEventHandler,false);

else

this.removeEventListener(shortTypeName,fHandler,true);

}

}

【统一接口:为FireFox添加IE的方法和属性的js代码】相关文章:

简介JavaScript中charAt()方法的使用

AngularJs中route的使用方法和配置

JavaScript中的blink()方法的使用

简介JavaScript中的getUTCFullYear()方法的使用

JSON简介以及用法汇总

简介JavaScript中getUTCMonth()方法的使用

JavaScript中strike()方法的使用介绍

在JS方法中返回多个值的方法汇总

一些有关检查数据的JS代码

jquery中添加属性和删除属性

精品推荐
分类导航