自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

深入學(xué)習(xí)JavaScript DOM遍歷方法

開發(fā) 前端
這里向大家描述一下Javascript DOM遍歷的概念,基于ID、元素類型、類名查找元素非常有用,但是如果你想基于它在DOM樹中的位置來(lái)查找元素該怎么辦?這就用到了DOM遍歷。

本文向大家簡(jiǎn)單介紹一下DOM遍歷的用法,比如說(shuō)你有一個(gè)給定的元素,你想查找它的父元素、子元素中的一個(gè)、它的上一個(gè)或下一個(gè)節(jié)點(diǎn)兄弟節(jié)點(diǎn),這就要用到DOM遍歷。

DOM遍歷

基于ID、元素類型、類名查找元素非常有用,但是如果你想基于它在DOM樹中的位置來(lái)查找元素該怎么辦?換句話說(shuō),你有一個(gè)給定的元素,你想查找它的父元素、子元素中的一個(gè)、它的上一個(gè)或下一個(gè)節(jié)點(diǎn)兄弟節(jié)點(diǎn)。例如,采用下面這段零碎的HTML代碼:

清單1:HTML碎片(一個(gè)table)

  1. <table> 
  2. <thead> 
  3. <tr> 
  4. <th>Name</th> 
  5. <th>EmailAddress</th> 
  6. <th>Actions</th> 
  7. </tr> 
  8. </thead> 
  9. <tbody> 
  10. <tridtrid="row-001"> 
  11. <td>JoeLennon</td> 
  12. <td>joe@joelennon.ie</td> 
  13. <td><ahrefahref="#">Edit</a>&nbsp;  
  14. <ahrefahref="#">Delete</a></td> 
  15. </tr> 
  16. <tridtrid="row-002"> 
  17. <td>JillMacSweeney</td> 
  18. <td>jill@example.com</td> 
  19. <td><ahrefahref="#">Edit</a>&nbsp;  
  20. <ahrefahref="#">Delete</a></td> 
  21. </tr> 
  22. </tbody> 
  23. </table> 
  24.  

 清單1使用縮進(jìn)來(lái)說(shuō)明其中每個(gè)元素節(jié)點(diǎn)在DOM樹中的位置。在這個(gè)實(shí)例中,table元素是根元素,有兩個(gè)子節(jié)點(diǎn)thead和tbody。thead元素有一個(gè)tr子節(jié)點(diǎn),tr有三個(gè)孩子--所有的th元素。tbody元素有兩個(gè)tr子節(jié)點(diǎn),每個(gè)tr節(jié)點(diǎn)有三個(gè)孩子。在上述每一行的第三個(gè)節(jié)點(diǎn)中進(jìn)一步包含子節(jié)點(diǎn),都是兩個(gè)鏈接標(biāo)記。

◆正如你知道的那樣,你可以使用一個(gè)JavaScript框架的選擇函數(shù)通過ID很輕松的選擇一個(gè)元素。在這個(gè)實(shí)例中,有兩個(gè)元素?fù)碛蠭D,它們是ID分別為row-001和row-002的tr元素。使用Prototype庫(kù)選擇第一個(gè)tr,可以使用下面的代碼:

  1. vartheRow=$('row-001');  
  2.  

在上一章,你還了解到,基于元素的類型或class使用選擇器來(lái)獲取元素。在這個(gè)實(shí)例中,你可以使用下面的語(yǔ)法來(lái)得到所有的td元素。

  1. varallCells=$$('td');  
  2.  

改代碼的主要問題在于它返回了每一個(gè)td元素。但是,如果你只想得到ID為row-001的tr的所有td元素該怎么辦?這正是DOM遍歷函數(shù)發(fā)揮作用的地方。首先,讓我們使用原型來(lái)選擇ID為row-001的tr的所有的子級(jí)。

  1. varfirstRowCells=theRow.childElements();  
  2.  

這將返回theRow變量(你最初設(shè)置的ID為row-001的tr)所有子元素的數(shù)組。

◆接下來(lái),我們假設(shè)你只想得到該行的第一個(gè)子元素。在本例中,即包含“JoeLennon”文本的td元素。要做到這一點(diǎn),使用下面的語(yǔ)句:

varfirstRowFirstCell=theRow.down();
真簡(jiǎn)單!這個(gè)特定的使用方法等價(jià)于:

  1. varfirstRowFirstCell=theRow.childElements()[0];  
  2.  

也可以這樣表示:

  1. varfirstRowFirstCell=theRow.down(0);  
  2.  

JavaScript的索引從零開始,所以上面的語(yǔ)句主要告知JavaScript來(lái)選擇第一個(gè)子元素。要選擇第二個(gè)子元素,你可以這樣用:

  1. varfirstRowSecondCell=theRow.down(1);  
  2.  

或者,你可以在兄弟節(jié)點(diǎn)之間瀏覽DOM。本例中,第二個(gè)單元格是第一個(gè)單元格的下一個(gè)兄弟節(jié)點(diǎn)。因此,你可以使用下面的語(yǔ)句:

  1. varfirstRowSecondCell=firstRowFirstCell.next();  
  2.  

與down()函數(shù)工作一樣,選擇第三個(gè)單元格可以這樣使用。

  1. varfirstRowThirdCell=firstRowFirstCell.next(1);  
  2.  

◆除了使用索引來(lái)查找特定節(jié)點(diǎn)外,Prototype庫(kù)還可以使用CSS選擇器語(yǔ)法。在清單1中,我們要找到第二個(gè)包含JillMacSweeney’詳細(xì)信息的鏈接(“刪除”鏈接)。

  1. varsecondRowSecondLink=$('row-002').down('a',1);  
  2.  

在本例中,使用$函數(shù)來(lái)查找ID為row-002的那一行,向下遍歷到第二個(gè)后代a元素(錨點(diǎn))。

一些框架還允許“菊花鏈?zhǔn)?rdquo;的遍歷功能,這意味著你可以彼此連接遍歷命令。上面的例子中,Prototype庫(kù)的另一種表達(dá)方式是這樣的:

  1. varsecondRowSecondLink=$('row-002').down('a').next();  
  2.  

看看下面的例子:

  1. vardomTraversal=$('row-001').down().up().next().previous();  
  2.  

正如你所見,菊花鏈允許你連接多個(gè)DOM遍歷語(yǔ)句。事實(shí)上,上述例子實(shí)際上最終選擇ID為row-001的tr元素,所以菊花鏈又回到了開始的地方。
 

【編輯推薦】

  1. 技術(shù)分享 如何獲取Dom元素的X/Y坐標(biāo)
  2. JQuery創(chuàng)建DOM元素方法解析
  3. JavaScript獲取HTML DOM節(jié)點(diǎn)元素詳解
  4. JavaScript和DOM輕松實(shí)現(xiàn)數(shù)據(jù)訪問
  5. HTML DOM與XML DOM的區(qū)別與聯(lián)系探究

 

 

責(zé)任編輯:佚名 來(lái)源: Denis'Blog
相關(guān)推薦

2010-09-28 09:22:34

DOM模型Html

2015-09-29 08:57:46

javascript對(duì)象

2010-09-28 16:22:17

DOM樹

2015-09-29 09:27:04

JavaScript對(duì)象

2010-10-09 10:10:55

JavaScriptFunction對(duì)象

2009-11-16 16:31:56

PHP數(shù)組刪除

2010-09-13 14:24:17

JavaScript

2009-11-17 14:13:34

PHP配置

2010-07-08 13:55:21

UML建模

2009-11-16 15:40:58

PHP數(shù)組函數(shù)

2010-09-28 14:44:56

遍歷DOM

2010-06-29 15:29:22

UML建模流程

2010-08-31 13:06:45

CSS

2020-03-23 14:15:51

RadonDB安裝數(shù)據(jù)庫(kù)

2010-06-07 16:55:00

JavaScript

2024-01-03 10:15:59

Python函數(shù)庫(kù)

2010-08-26 09:58:01

CSS clear

2010-09-06 11:26:18

CSS偽類

2010-09-07 10:57:34

CSS偽類

2010-08-11 09:29:25

FlexJava數(shù)據(jù)模型
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)