firefox兼容ie的dom方法脚本

if ( ! document.all){
// zzcv的ff ie兼容脚本
/*
脚本没有解决的问题及处理:

2.IE下,可以使用()或[]获取集合类对象;Firefox下,只能使用[]获取集合类对象. 
解决方法:统一使用[]获取集合类对象. 
3.IE下,可以使用获取常规属性的方法来获取自定义属性,也可以使用getAttribute()获取自定义属性;Firefox下,只能使用getAttribute()获取自定义属性. 
解决方法:统一通过getAttribute()获取自定义属性. 
4.IE下,HTML对象的ID可以作为document的下属对象变量名直接使用;Firefox下则不能.
5.Firefox下,可以使用与HTML对象ID相同的变量名;IE下则不能。
解决方法:使用document.getElementById("idName")代替document.idName.最好不要取HTML对象ID相同的变量名,以减少错误;在声明变量时,一律加上var,以避免歧义. 
6.IE下input.type属性为只读;但是Firefox下input.type属性为读写. 
8.IE下,可以通过showModalDialog和showModelessDialog打开模态和非模态窗口;Firefox下则不能
9.Firefox的body在body标签没有被浏览器完全读入之前就存在;而IE的body则必须在body标签被浏览器完全读入之后才存在
10.
*/
// 文档兼容
HTMLDocument.prototype.__defineGetter__( " all " , function (){
    
return   this .getElementsByName( " * " );});

HTMLFormElement.constructor.prototype.item
= function (s){
    
return   this .elements[s];};

HTMLCollection.prototype.item
= function (s){
    
return   this [s];};
    
// 事件兼容
window.constructor.prototype.__defineGetter__( " event " , function (){
    
for ( var  o = arguments.callee.caller,e = null ;o != null ;o = o.caller){
        e
= o.arguments[ 0 ];
        
if (e && (e  instanceof  Event))
            
return  e;}
    
return   null ;});

window.constructor.prototype.attachEvent
= HTMLDocument.prototype.attachEvent = HTMLElement.prototype.attachEvent = function (e,f){
    
this .addEventListener(e.replace( /^ on / i, "" ),f, false );};

window.constructor.prototype.detachEvent
= HTMLDocument.prototype.detachEvent = HTMLElement.prototype.detachEvent = function (e,f){
    
this .removeEventListener(e.replace( /^ on / i, "" ),f, false );};


with (window.Event.constructor.prototype){
    __defineGetter__(
" srcElement " , function (){
        
return   this .target;});

    __defineSetter__(
" returnValue " , function (b){
        
if ( ! b) this .preventDefault();});

    __defineSetter__(
" cancelBubble " , function (b){
        
if (b) this .stopPropagation();});

    __defineGetter__(
" fromElement " , function (){
        
var  o = ( this .type == " mouseover " && this .relatedTarget) || ( this .type == " mouseout " && this .target) || null ;
        
if (o)
            
while (o.nodeType != 1 )
                o
= o.parentNode;
        
return  o;});

    __defineGetter__(
" toElement " , function (){
        
var  o = ( this .type == " mouseover " && this .target) || ( this .type == " mouseout " && this .relatedTarget) || null ;
        
if (o)
            
while (o.nodeType != 1 )
                o
= o.parentNode;
        
return  o;});

    __defineGetter__(
" x " , function (){
        
return   this .pageX;});

    __defineGetter__(
" y " , function (){
        
return   this .pageY;});

    __defineGetter__(
" offsetX " , function (){
        
return   this .layerX;});

    __defineGetter__(
" offsetY " , function (){
        
return   this .layerY;});
}
// 节点操作兼容
with (window.Node.prototype){
    replaceNode
= function (o){
        
this .parentNode.replaceChild(o, this );}

    removeNode
= function (b){
        
if (b)
            
return   this .parentNode.removeChild( this );
        
var  range = document.createRange();
        range.selectNodeContents(
this );
        
return   this .parentNode.replaceChild(range.extractContents(), this );}

    swapNode
= function (o){
        
return   this .parentNode.replaceChild(o.parentNode.replaceChild( this ,o), this );}

    contains
= function (o){
        
return  o ? ((o == this ) ? true :arguments.callee(o.parentNode)): false ;}
}
// HTML元素兼容
with (window.HTMLElement.prototype){
    __defineGetter__(
" parentElement " , function (){
        
return  ( this .parentNode == this .ownerDocument) ? null : this .parentNode;});

    __defineGetter__(
" children " , function (){
        
var  c = [];
        
for ( var  i = 0 ,cs = this .childNodes;i < cs.length;i ++ ){
            
if (cs[i].nodeType == 1 )
                c.push(cs[i]);}
        
return  c;});

    __defineGetter__(
" canHaveChildren " , function (){
        
return   !/^ (area | base | basefont | col | frame | hr | img | br | input | isindex | link | meta | param)$ / i.test( this .tagName);});

    __defineSetter__(
" outerHTML " , function (s){
        
var  r = this .ownerDocument.createRange();
        r.setStartBefore(
this );
        
void   this .parentNode.replaceChild(r.createContextualFragment(s), this );
        
return  s;});
    __defineGetter__(
" outerHTML " , function (){
        
var  as = this .attributes;
        
var  str = " < " + this .tagName;
        
for ( var  i = 0 ,al = as.length;i < al;i ++ ){
            
if (as[i].specified)
                str
+= "   " + as[i].name + " =" " + as[i].value + " " " ;}
        
return   this .canHaveChildren ? str + " > " :str + " > " + this .innerHTML + " </ " + this .tagName + " > " ;});

    __defineSetter__(
" innerText " , function (s){
        
return   this .innerHTML = document.createTextNode(s);});
    __defineGetter__(
" innerText " , function (){
        
var  r = this .ownerDocument.createRange();
        r.selectNodeContents(
this );
        
return  r.toString();});

    __defineSetter__(
" outerText " , function (s){
        
void   this .parentNode.replaceChild(document.createTextNode(s), this );
        
return  s});
    __defineGetter__(
" outerText " , function (){
        
var  r = this .ownerDocument.createRange();
        r.selectNodeContents(
this );
        
return  r.toString();});

    insertAdjacentElement
= function (s,o){
        
return  (s == " beforeBegin " && this .parentNode.insertBefore(o, this )) || (s == " afterBegin " && this .insertBefore(o, this .firstChild)) || (s == " beforeEnd " && this .appendChild(o)) || (s == " afterEnd " && (( this .nextSibling) && this .parentNode.insertBefore(o, this .nextSibling) || this .parentNode.appendChild(o))) || null ;}

    insertAdjacentHTML
= function (s,h){
        
var  r = this .ownerDocument.createRange();
        r.setStartBefore(
this );
        
this .insertAdjacentElement(s,r.createContextualFragment(h));}

    insertAdjacentText
= function (s,t){
        
this .insertAdjacentElement(s,document.createTextNode(t));}
}
// XMLDOM兼容
window.ActiveXObject = function (s){
    
switch (s){
        
case   " XMLDom " :
        document.implementation.createDocument.call(
this , " text/xml " , "" null );
        
// domDoc = document.implementation.createDocument("text/xml","", null);
         break ;
        }
    }

XMLDocument.prototype.LoadXML
= function (s){
    
for ( var  i = 0 ,cs = this .childNodes,cl = childNodes.length;i < cl;i ++ )
        
this .removeChild(cs[i]);
    
this .appendChild( this .importNode(( new  DOMParser()).parseFromString(s, " text/xml " ).documentElement, true ));}

XMLDocument.prototype.selectSingleNode
= Element.prototype.selectSingleNode = function (s){
    
return   this .selectNodes(s)[ 0 ];}
XMLDocument.prototype.selectNodes
= Element.prototype.selectNodes = function (s){
    
var  rt = [];
    
for ( var  i = 0 ,rs = this .evaluate(s, this , this .createNSResolver( this .ownerDocument == null ? this .documentElement: this .ownerDocument.documentElement),XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null ),sl = rs.snapshotLength;i < sl;i ++ )
        rt.push(rs.snapshotItem(i));
    
return  rt;}

XMLDocument.prototype.__proto__.__defineGetter__(
" xml " , function (){
    
try {
        
return   new  XMLSerializer().serializeToString( this );}
    
catch (e){
        
return  document.createElement( " div " ).appendChild( this .cloneNode( true )).innerHTML;}});
Element.prototype.__proto__.__defineGetter__(
" xml " , function (){
    
try {
        
return   new  XMLSerializer().serializeToString( this );}
    
catch (e){
        
return  document.createElement( " div " ).appendChild( this .cloneNode( true )).innerHTML;}});

XMLDocument.prototype.__proto__.__defineGetter__(
" text " , function (){
    
return   this .firstChild.textContent;});

Element.prototype.__proto__.__defineGetter__(
" text " , function (){
    
return   this .textContent;});
Element.prototype.__proto__.__defineSetter__(
" text " , function (s){
    
return   this .textContent = s;});

}
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值