郁闷的一天

 昨天都要下班了,突然发现自定义的目录树在FF中无法正常执行键盘鼠标事件,表现为,当创建了自定义的目录树以后,body的所有事件都被屏蔽,在页面的任何地方点击都会触发目录树的onclick事件,真是郁闷,搞了半夜无果,没有办法,今天早上来了继续寻找原因,把所有的代码通读一遍,没有发现可疑的地方,把能可能出现问题的地方注释掉,问题依然。MMD,baidu google了N多把也没有找到有人说这个问题,由于在IE中运行没有什么问题,所以我一直认为是浏览器兼容的问题,可以努力了一天也没有什么结果,实在是没有办法了,在一个网页看到3.0beta2的下载(原来用的2.0),于是想会不会是FF的内部bug,自己感觉都是有病乱投医阿,下载安装,问题还真的没有出现,NNd,不过搜集了一天也看了不少好的帖子,也算今天的收获吧(自我安慰下),转 贴下可以让FF具有IE功能的扩展代码;这些代码可以省很多个脑细胞
< script language = " JavaScript "  type = " Text/JavaScript " >
<!--
if (window.Event) {// 修正Event的DOM
    /*
                                IE5        MacIE5        Mozilla        Konqueror2.2        Opera5
    event                        yes        yes            yes            yes                    yes
    event.returnValue            yes        yes            no            no                    no
    event.cancelBubble            yes        yes            no            no                    no
    event.srcElement            yes        yes            no            no                    no
    event.fromElement            yes        yes            no            no                    no
    
    
*/

    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
    /*
                                IE5        MacIE5        Mozilla        Konqueror2.2        Opera5
    document.documentElement    yes        yes            yes            yes                    no
    document.activeElement        yes        null        no            no                    no
    
    
*/

    }

if (window.Node) {// 修正Node的DOM
    /*
                                IE5        MacIE5        Mozilla        Konqueror2.2        Opera5
    Node.contains                yes        yes            no            no                    yes
    Node.replaceNode            yes        no            no            no                    no
    Node.removeNode                yes        no            no            no                    no
    Node.children                yes        yes            no            no                    no
    Node.hasChildNodes            yes        yes            yes            yes                    no
    Node.childNodes                yes        yes            yes            yes                    no
    Node.swapNode                yes        no            no            no                    no
    Node.currentStyle            yes        yes            no            no                    no
    
    
*/

    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 >
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值