`
cindylu520
  • 浏览: 148094 次
  • 性别: Icon_minigender_2
  • 来自: 大连
社区版块
存档分类
最新评论

让FF和IE离得更近

    博客分类:
  • JS
阅读更多

给FF添加了IE专有的属性和方法:

 

 

 

<script language="JavaScript" type="Text/JavaScript">
<!--
if(window.Event){// 修正Event的DOM
    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
    }
if(window.Node){// 修正Node的DOM
    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>

 

 

举个例子,在FF中使用currentStyle:

 

<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'>
<html xmlns='http://www.w3.org/1999/xhtml' xml:lang='cn' lang='cn'>
<head>
<style type="text/css">
#a{width:100px;height:100px;background-color:yellow;}
</style>
<script type="text/javascript">
 window.onload=function(){
  HTMLElement.prototype.__defineGetter__("currentStyle", function(){return this.ownerDocument.defaultView.getComputedStyle(this,null);});
  //上面一行代码就给所有的HTML元素添加了currentStyle属性
  var a=document.getElementById("a");
  alert("style中的width=\""+a.style.width+"\"\tcurrentStyle中的width=\""+a.currentStyle.width+"\"");
 } 
</script>
</head><body>
 <div id="a"></div>
</body>
</html>

 

 

本文链接:http://www.blueidea.com/tech/web/2008/5423.asp

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    FF和IE兼容性问题

    首先,让我们来看标题和描述中提到的问题:如何使`DIV`或`table`在IE和Firefox中水平居中。在CSS中,有多种方法可以实现这个效果,但并非所有方法在所有浏览器中都能得到相同的支持。在提供的部分内容中,提到了两种...

    FF和IE的兼容性问题总结

    11. **window.location.href**:IE和FF2.0.x以上版本都支持`window.location`或`window.location.href`,但在FF1.5.x中,只能使用`window.location.href`。建议在所有代码中使用`window.location.href`,以确保一致...

    IE和FF的部分区别

    以下是关于IE和FF部分区别的详细分析: 1. **边界问题**: - 在CSS中,IE将边框宽度计算在元素的总宽度和高度之内,而Firefox则将边框外加到元素尺寸上。例如,一个设置为`width:100px;height:100px;border:1px ...

    JavaScript在IE和FF中的区别

    nt : event.target;)来代替 IE 下的 event...通过使用兼容性函数和方法,可以确保代码在IE和Firefox中都能正常工作。此外,还可以考虑使用如jQuery等库,它们已经处理了许多兼容性问题,使开发者能够更专注于业务逻辑。

    IE与FF脚本兼容性问题

    将 `document.formName.item("itemName")` 替换为 `document.formName.elements["itemName"]`,这样可以在IE和FF中都能正确获取表单元素。 **示例代码:** ```javascript // 错误用法 var element = document.form...

    FF650R17IE4.pdf

    FF650R17IE4.pdf

    ie6 ie7 ff浏览器兼容

    #### 标题解析:“ie6 ie7 ff浏览器兼容” 该标题明确指出了文章关注的核心问题——即确保网页能在IE6、IE7及Firefox等浏览器中正确显示。这意味着开发者需要采取一定的措施来适配这些浏览器,确保无论用户使用何种...

    ie和ff兼容性大集合

    ### IE和FF兼容性大集合 随着互联网技术的迅速发展,各式各的浏览器层出不穷,而浏览器之间的兼容性问题成为开发者必须面对的一个挑战。本文将基于实际经验与网络资源,总结Internet Explorer (IE) 和 Firefox (FF)...

    FF与IE对javascript和CSS的区别

    在开发Web应用时,浏览器...在编写JavaScript和CSS代码时,应该考虑这些兼容性问题,以便确保在FF和IE等不同浏览器上的正确运行。通过使用条件语句或封装函数,可以有效地处理这些差异,提高代码的可维护性和兼容性。

    兼容ff和ie的日历控件 js

    从给定的文件标题、描述、标签以及部分内容中,我们可以提炼出关于“兼容FF和IE的日历控件JS”的详细知识点。以下是对这些知识点的深入解析: ### 标题:“兼容ff和ie的日历控件 js” #### 知识点1:兼容性问题 ...

    ie和ff浏览器的兼容

    为了让鼠标悬停时的指针样式能在IE和FF中保持一致,可以使用`cursor:pointer`。但在IE中,还需要额外添加`cursor:hand`来兼容IE5。 #### 6. 解决UL元素默认margin和padding的问题 在IE中,默认的`UL`元素的`margin...

    兼容ie和ff的页签

    在本案例中,"兼容ie和ff的页签"指的是一个JavaScript实现的页签功能,能够同时在Internet Explorer(IE)和Firefox(FF)这两个主流浏览器上正常工作。由于这两种浏览器对某些Web标准的实现存在差异,因此创建跨...

    ie和ff对比

    标题中的“ie和ff对比”指的是Internet Explorer(简称IE)与Firefox浏览器之间的比较。这两个都是历史上非常重要的网页浏览器,但它们在技术实现、兼容性、性能以及标准支持方面存在显著差异。 **一、渲染引擎差异...

    IE与FF的兼容问题

    但是,在IE和Firefox中,这种方法的表现不同。一个可行的方案是通过调整`line-height`的值来实现元素的垂直居中。 7. **光标样式** 设置`cursor: pointer`会使鼠标在悬停时变为手形指针。在IE中,这通常表示可...

    图片链接无虚线,保证在ff和ie下正常运行

    ### 图片链接无虚线,保证在FF和IE下正常运行 #### 背景介绍 在网页设计与开发过程中,确保网站在不同浏览器(如Firefox(简称FF)和Internet Explorer(简称IE))下的兼容性是至关重要的。特别是在早期版本的IE中...

    ie6 ie7 ie8 ff兼容性测试页

    在ie6 ie7 ie8 ff浏览器下显示不同的效果,测试的时候很好用哦。

    CSS完美兼容IE6IE7FF的通用方法

    为了在IE和Firefox之间保持文本居中的效果,可以采用以下CSS代码: ```css body { TEXT-ALIGN: center; } #center { MARGIN-RIGHT: auto; MARGIN-LEFT: auto; } ``` 这样可以确保在不同的浏览器中元素都能正确...

    兼容ie6/ie7/ie8/ff 省市县的js

    综上所述,"兼容ie6/ie7/ie8/ff 省市县的js"是一个旨在解决跨浏览器兼容性的JavaScript组件,它实现了在旧版IE和Firefox上显示和操作省市县选择的功能。开发者在创建这样的组件时需要考虑DOM操作、事件处理、数据...

    JS在IE和FF中的兼容性问题

    - `style` 对象:IE和FF对某些CSS属性的命名不一致,如 `border-color` 在IE中为 `borderColor`,FF中为 `borderColor`。使用 `getComputedStyle` 或 `currentStyle` 方法可以获取更准确的样式信息。 4. **DOM操作...

Global site tag (gtag.js) - Google Analytics