给moz-firefox下添加IE方法和属性
2024-06-24 11:49:36阅读量:37 字体:大 中 小
在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);
});
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;iattrs.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);
}
}
//--
/script
免责声明:
本文《给moz-firefox下添加IE方法和属性》版权归原作者所有,内容不代表本站立场!
如本文内容影响到您的合法权益(含文章中内容、图片等),请及时联系本站,我们会及时删除处理。
推荐阅读

家人地图如何开启永久位置
家人地图是高德地图推出的家人定位查询功能,要开启家人地图永久位置分享,可以直接在家人地图设置中开启。具体操作方法如下: 家人地图如何开启永久位置 1、打开手机高德地图app,点击我的”。 ...
阅读: 958

快手号怎么修改不了,只有复制
快手号只有复制,修改不了,是因为近期已经修改过快手号了,从修改时开始需要等待90天后才能再次修改。修改快手号的具体操作方法如下: 快手号怎么修改不了,只有复制 1、打开手机快手app,点击左上角三条横...
阅读: 854

qq群怎么设置不让群成员加好友
qq群目前还不能设置不让群成员加好友,只能设置不让群里的人发起临时会话减少群员的互动性。设置不让群里的人发起临时会话的具体操作如下: qq群怎么设置不让群成员加好友 1、打开手机QQ软件,找到自己创建...
阅读: 839

朋友圈设置三天可见是对所有人吗
朋友圈三天可见是针对朋友圈的一个设置,针对所有的朋友,朋友圈设置三天可见后,所有朋友只能看到你最近三天的朋友圈。朋友圈设置三天可见的具体操作如下: 朋友圈设置三天可见是对所有人吗 1、打开手机微信ap...
阅读: 849

微信很小的那种表情包怎么做的
平常生活中微信很小的那种表情包可以在微信的小程序里根据自己的喜好进行制作,通过以下步骤制作微信表情包: 微信很小的那种表情包怎么做的 1、打开微信,切换到发现页面,点击小程序”进入小程序页...
阅读: 1508

剪映怎么在中间插视频
想要使用剪映视频中间插入另一个视频,可以把原本视频分割再插入新的视频,通过以下步骤使用剪映在中间插视频: 剪映怎么在中间插视频 1、打开剪映,点击开始创作”进入选择页面。 2、选择一个视...
阅读: 883
热门文章
1.手机号过户后微信怎么更改实名认证
- 1

- 手机号过户后微信怎么更改实名认证
- 2022-12-31
- 1
2.抖音收藏的歌曲怎么自动播放
- 2

- 抖音收藏的歌曲怎么自动播放
- 2022-12-28
- 2
3.淘宝好友圈关闭
- 3

- 淘宝好友圈关闭
- 2022-12-28
- 3
4.饿了么百亿补贴怎么领
- 4

- 饿了么百亿补贴怎么领
- 2022-12-28
- 4
5.美团外卖代金券卡密怎么兑换
- 5

- 美团外卖代金券卡密怎么兑换
- 2022-12-28
- 5
6.淘宝超过七天退货技巧
- 6

- 淘宝超过七天退货技巧
- 2022-12-28
- 6
7.可话怎么看别人动态
- 7

- 可话怎么看别人动态
- 2022-12-28
- 7
8.快手上的流动文字怎么弄
- 8

- 快手上的流动文字怎么弄
- 2022-12-28
- 8
9.英语趣配音怎么导出视频
- 9

- 英语趣配音怎么导出视频
- 2022-12-28
- 9
10.上传群相册怎么不在群里显示
- 10

- 上传群相册怎么不在群里显示
- 2022-12-28
- 10
最近更新

酷狗音乐中使用蝰蛇音效制作工具的具体操作方法
2024-11-11

win7电脑中出现声音图标不见了的具体解决方法
2024-11-11

车到哪app的详细软件介绍
2024-11-11

小米9se中查看序列号的具体操作方法
2024-11-11

迅雷中使用FTP探测器的详细操作方法
2024-11-11

ppt制作出小荷才露尖尖角动画场景的具体操作步骤
2024-11-11
