日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
JavaScriptDOM文檔遍歷實戰(zhàn)

在介紹了《JavaScript DOM修改文檔樹方法實例》與《JavaScript DOM實戰(zhàn):創(chuàng)建和克隆元素》,本文將介紹JavaScript DOM文檔遍歷的詳細(xì)知識,我們先從HTML頁面最基本的組成元素討論起:

我們提供的服務(wù)有:成都網(wǎng)站設(shè)計、網(wǎng)站制作、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、池州ssl等。為近千家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的池州網(wǎng)站制作公司

 
 
 
  1.   

訪問元素,你應(yīng)該明白它是該文件的document元素,那你就可以使用document的documentElement屬性:

 
 
 
  1. var oHtml=document.documentElement;//可以直接訪問元素  
  2. alert("節(jié)點名稱 : "+oHtml.nodeName);//節(jié)點名稱  
  3. alert("節(jié)點類型 : "+oHtml.nodeType);//節(jié)點類型為 1  

獲取 和 元素:

 
 
 
  1. var oHead=oHtml.firstChild;//HEAD節(jié)點  
  2. var oBody=oHtml.lastChild;//BODY節(jié)點  

也可以通過childNodes屬性,獲取 和 元素:

 
 
 
  1. var oHead=oHtml.childNodes.item(0);//HEAD節(jié)點  
  2. //var oHead=oHtml.childNodes[0];//簡寫,也有同樣的結(jié)果是HEAD節(jié)點  
  3. var oBody=oHtml.childNodes.item(1);//BODY節(jié)點  
  4. //var oBody=oHtml.childNodes.item(1);//簡寫,也有同樣的結(jié)果是BODY節(jié)點  

注意:方括號標(biāo)記其實是NodeList在javascript中的簡便實現(xiàn)。實際上正式的從childNodes列表中獲取子節(jié)點的方法是使用item()方法:HTML DOM 中的專有屬性 document.body ,它常用于直接訪問元素:

 
 
 
  1. var oBody=document.body;  

既然我們都知道了以上節(jié)點對象的獲取方式,那我們用oHtml,oHead,oBody 這三個變量來確定一下它們之間的關(guān)系:

 
 
 
  1. alert(oHead.parentNode==oHtml);//HEAD節(jié)點的父節(jié)點是BODY節(jié)點,返回 true   
  2. alert(oBody.parentNode==oHtml);//BODY節(jié)點的父節(jié)點是BODY節(jié)點,返回 true   
  3. alert(oBody.previousSibling==oHead);//BODY節(jié)點的上一個兄弟節(jié)點是HEAD節(jié)點 ,返回 true  
  4. alert(oHead.nextSibling==oBody);//HEAD節(jié)點的下一個兄弟節(jié)點是BODY節(jié)點,返回 true  
  5. alert(oHead.ownerDocument==document); //返回一個節(jié)點的根元素(Document),HEAD節(jié)點是否指向該文檔,返回 true  

通過上面的學(xué)習(xí)我們已經(jīng)了解遍歷節(jié)點的最基本的方式, 也學(xué)會了如何找到某一個節(jié)點的兄弟節(jié)點及它的子節(jié)點。

#p#

復(fù)雜的節(jié)點遍歷

在上面的學(xué)習(xí)中我們好像沒有遇到過大的阻礙,下面我們以一個“導(dǎo)航條”為實例:

 
 
 
  1.  
  2.     

    我的導(dǎo)航條

                
  3.      
  4.        
  5. HOME
  6.  
  7.        
  8. (X)Html / Css
  9.  
  10.        
  11. Ajax / RIA
  12.  
  13.        
  14. GoF
  15.  
  16.        
  17. JavaScript
  18.  
  19.        
  20. JavaWeb
  21.  
  22.        
  23. jQuery
  24.  
  25.        
  26. MooTools
  27.  
  28.        
  29. Python
  30.  
  31.        
  32. Resources
  33.  
  34.      
  

首先我想把看一下我的導(dǎo)航條下有多少個子節(jié)點。我***想到的是前面我學(xué)過的查找元素的2種方法:

getElementById() # 通過ID屬性查找元素

該方法將返回一個與那個有著給定id屬性值的元素節(jié)點相對應(yīng)的對象。

getElementsByTagName() # 通過標(biāo)簽名稱查找元素

該方法返回一個對象數(shù)組,每個對象分別對應(yīng)著文檔里有著給定標(biāo)簽的一個元素。

 
 
 
  1.   

節(jié)點遍歷

那我們接下來,測一下是否是我們想要的東西:

 
 
 
  1.   

先看一下***個方法queryElementsId()好像我們在IE中沒有發(fā)現(xiàn)有什么問題,那我們在Firefox中看一下是否也是我們想要的結(jié)果。

這時,問題出現(xiàn)了,不同的瀏覽器在判斷何為Text節(jié)點上存在著一些差異,例如在A級瀏覽器中的FF和IE就有很大的差異,F(xiàn)ireFox會把元素之間的空白、換行、tab都是Text節(jié)點,IE下會把空白全部忽略掉,只有內(nèi)聯(lián)元素(如em,span)后的換行、空格、tab會被認(rèn)為是一個Text。既然遇到了問題那我們就得解決問題,問題的根源我們也知道了,那相應(yīng)的解決方案就好做了。

方法一:

 
 
 
  1.   

方法二:

 
 
 
  1.   

方法三:推薦

 
 
 
  1.   

好了,我們在驗證一下,#Text節(jié)點問題是否處理掉了。那我們就用方法3 中removeWhitespace(nav)方法來處理queryElementsId()方法中的#Text節(jié)點問題。

 
 
 
  1.   

正如看到的結(jié)果,IE和FireFox中都沒有問題了。

#p#

一個比較通用的方法:

 
 
 
  1.  

用元素節(jié)點的DOM屬性遍歷DOM樹

 
 
 
  1.  

寫到這里,既然標(biāo)準(zhǔn)的previousSibling,nextSibling,firstChild,lastChild,parentNode遍歷方法有瀏覽器不兼容問題。我上面的解決方案是去掉遍歷元素的相關(guān)空的#Text節(jié)點,是一個好的解決方案,但是使用起來不方便,我們何不自己寫一些遍歷節(jié)點的方法來代替標(biāo)準(zhǔn)的的previousSibling,nextSibling,firstChild,lastChild,parentNode。

我們的思路是利用元素是nodeType屬性來判斷元素是節(jié)點類型中那種節(jié)點類型,在DOM節(jié)點中我最常用的是元素節(jié)點,文本節(jié)點,屬性節(jié)點,對應(yīng)的類型值是元素節(jié)點nodeType=1 or ELEMENT_NODE, 文本節(jié)點 nodeType=2 or ATTRIBUTE_NODE,屬性節(jié)點 nodeType=3 or TEXT_NODE,但是IE中并不支持命名常量,那就用數(shù)值吧,再配合標(biāo)準(zhǔn)的遍歷屬性。完全可以自己生產(chǎn)一些輔助函數(shù)來取代標(biāo)準(zhǔn)的遍歷方式。以下一系列的輔助函數(shù)可以幫助您,他們能取代標(biāo)準(zhǔn)的previousSibling,nextSibling,firstChild,lastChild,parentNode;

 
 
 
  1.  

原文鏈接:http://cssrainbow.cn/tutorials/javascript/565.html

【編輯推薦】

  1. JavaScript DOM特性與應(yīng)用詳解
  2. JavaScript DOM修改文檔樹方法實例
  3. JavaScript DOM實戰(zhàn):創(chuàng)建和克隆元素 

網(wǎng)頁標(biāo)題:JavaScriptDOM文檔遍歷實戰(zhàn)
本文地址:http://www.dlmjj.cn/article/coeiijc.html