複製程式碼 程式碼如下:




 
  DOM功能擴充
 
 
    你好
   
 


以上這段程式碼就是功能擴充後的最終效果,它與上一段程式碼實現的功能是一樣的,但現在它還不能執行,要進行擴充後才可以,在此之前先來看一些基礎知識,這很重要,因為等下會用到:
  1、HTMLElement,在DOM標準中,每個元素都繼承自HTMLElement,而HTMLElement又繼承自Element,Element又繼承自Node;於是我們可以使用HTMLElement的Prototype來擴充HTML元素的方法與屬性,如何實作?我們來看一段程式碼:

複製程式碼 程式碼如下:


 
  DOM功能擴充
 
 
    你好
   
 



以上程式碼在頁面載入的時候就彈出“這是一個擴充方法”,不過相信你已經注意到了,在IE6,7,8裡面會出錯,但在IE9以上或Chrome,Firefox,Opera這些瀏覽器裡面都能正常運作,這是相容性問題,別擔心,後面會解決。
  以上的程式碼彈性不夠好,我們優化一下,讓它更有彈性:
複製程式碼 程式碼如下:



 
  DOM功能擴充
 
 
    你好
   
 



從上述程式碼可以看出,有了DOMExtend這個方法以後,我們就可以透過傳入不用的name 和fn 來實現不同的擴充。
  2、以上講完了HTMLElement,接下來講講事件的綁定,很多人都知道,IE和其他瀏覽器的事件綁定方式不一樣,實現兼容所有瀏覽器的事件綁定的代碼如下:



複製程式碼 程式碼如下:function BindEvent(elem,event,eventfun){    if(elem.addEventListener){
        elem.addEventListener(event,fun,false);
    } );
    }
}


以下是事件綁定的使用例子:



複製代碼

代碼如下:   DOM功能擴充
 >  DOM功能擴充
  head>
 
    你好
   



 
  DOM功能擴充
 
 
    你好
   




複製代碼


代碼如下:



 
  DOM 功能擴充

 
    你好
   
   name, fn){
            if(typeof(HTMLElement)!="undefined"){
                }
            else{
               var _getElementById=document.getElementById;
                       var _elem=_getElementById(id);
              return _elem;
               }
                  document.getElementsByTagName=function(tag){
                          var len=_elem.length;
                  ,(var i=0;i      =「fn」) ;
                    }
         
                }
                var var _createElement=document.createElement;
                document.createElement=function(tag){
                    var _elem=_create元素(標籤);
                    eval("_elem." name " =" fn);
                   return _elem;
          var _documentElement=document.documentElement;
                eval("_documentElement." name "=" fn);
                var _documentBody=document.body;
                 }
        }
        function BindEvent(活動,有趣){               this.addEventListener(event,fun,false);
   
            else{
               ,       }
        DOMExtend("bind",BindEvent);var wrap=document.getElementById("tagA" );
        wrap.bind("click",function(){
            alert(this. nerHTML);



OK,目前為止已經解決了相容性問題,這是所有瀏覽器都能順利通過的DOM元素擴展的代碼,但是這樣還有一個小問題,細心的人會發現在IE瀏覽器裡面彈出的結果是"undefined",而不是"你好";問題的原因在於IE的事件綁定上,看以上代碼,當調用alert(this.innerHTML)的時候,由於IE綁定事件用的是attachEvent,這時候this指向的是windows,於是現在的目標的要改變this指向的對象,將this指向tagA。於是經過修改,完整程式碼如下:



複製程式碼
程式碼如下:



 
  DOM 功能擴充

 
   
你好
   
   name, fn){
            if(typeof(HTMLElement)!="undefined"){
                }
            else{
               var _getElementById=document.getElementById;
                       var _elem=_getElementById(id);
              return _elem;
               }
                  document.getElementsByTagName=function(tag){
                          var len=_elem.length;
                  ,(var i=0;i      =「fn」) ;
                    }
         
                }
                var var _createElement=document.createElement;
                document.createElement=function(tag){
                    var _elem=_create元素(標籤);
                    eval("_elem." name " =" fn);
                   return _elem;
          var _documentElement=document.documentElement;
                eval("_documentElement." name "=" fn);
                var _documentBody=document.body;
                 }
        }
        function BindEvent(活動,有趣){               this.addEventListener(event,fun,false);
   
            else{
                var tag unction(){
                    fun.apply(tag,arguments);//這裡是關鍵            }
        }
           wrap.bind("click",function(){
           警報(this.innerHTML);
        })
   
    })
   
相關標籤:
來源:php.cn
上一篇:artDialog 4.1.5 Dreamweaver程式碼提示/補全插件 附下載_jquery 下一篇:別了 JavaScript中的isXX系列_javascript技巧
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
最新問題
相關專題
更多>
熱門推薦
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板