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

【给moz-firefox下添加IE方法和属性】在IECN看到心云写的关于互换select的JS,因里面用到removeNode和swapNode等方法,导致在Firefox下无效 。刚刚Google了下,发现可以通过自定义原型来修正只在IE下有效的属性与方法 。

原文参考:http://www.phpx.com/happy/top97619.html

修改方案如下:

scriptlanguage="javascript"type="text/javascript"
!--
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;ithis.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);

推荐阅读