DOM的TreeWalker物件簡介

cenfeng發表於2019-07-30

TreeWalker物件是一個功能強大的DOM2物件,可讓您輕鬆地從文件中的節點中過濾並建立自定義集合。 好吧,這聽起來很怪異,但是對於需要解析文件樹的怪異工作,熟悉這個物件並不會有任何傷害。 在編寫指令碼時,您可能需要檢索具有特定CSS類名的網頁中的所有元素,或者需要檢索具有特定屬性值的元素的XML文件。 TreeWalker物件可以輕鬆完成這些任務。 在本教程中,我將介紹DOM2的TreeWalker物件,它是 Firefox / Opera8 +中 支援的DOM2方法,  但不是IE6或IE7(截至beta3)。

在繼續之前,請注意TreeWalker物件中有一個名為NodeIterator的表兄弟,我將在以後的教程中介紹。

DOM的TreeWalker物件簡介  document.createTreeWalker()方法

TreeWalker物件可能會變得神祕而且有些複雜,但它實際上只是通過一個方法document.createTreeWalker()來實現。 該方法及其接受的4個引數簡化了可能需要多次傳統編碼的過程,例如,過濾文件中具有特定元素型別並攜帶特定屬性的所有節點。 但在我們完成所有這些之前,這裡是document.createTreeWalker()的基本描述:

document.createTreeWalker(root,nodesToShow,filter,entityExpandBol)

是時候分解4個引數了:

  1. root: 使用開始搜尋文件樹的根節點。

  2. nodesToShow:  TreeWalker應訪問的節點型別。

  3. filter(或null): 引用自定義函式(NodeFilter物件)來過濾返回的節點。 輸入null表示無。

  4. entityExpandBol: 布林引數,指定是否應擴充套件實體引用。

對於3),有效常量值為:

NodeFilter常量
NodeFilter.SHOW_ALL NodeFilter.SHOW_ 
ENTITY_REFERENCE
NodeFilter.SHOW_ 
DOCUMENT_TYPE
NodeFilter.SHOW_ELEMENT NodeFilter.SHOW_ENTITY NodeFilter.SHOW_FRAGMENT
NodeFilter.SHOW_ATTRIBUTE NodeFilter.SHOW_ 
PROCESSING_INSTRUCTION
NodeFilter.SHOW_NOTATION
NodeFilter.SHOW_TEXT NodeFilter.SHOW_COMMENT
NodeFilter.SHOW_ 
CDATA_SECTION
NodeFilter.SHOW_DOCUMENT

雖然有15個不同的NodeFilter常量可以限制TreeWalker返回的節點型別,但您可能只會在大多數情況下使用其中的一些節點。 例如,NodeFilter.SHOW_ELEMENT返回所有元素節點。

好吧,所以你很想看到document.createTreeWalker()的演示,這是一個非常基本的開始:

1
2
3
4
6
7
8
9
10
11
<font style= "vertical-align: inherit;" ><font style= "vertical-align: inherit;" ><div id =“contentarea”></font></font><font></font><font style= "vertical-align: inherit;" ><font style= "vertical-align: inherit;" >
<p>一些<span>文字</ span> </ p></font></font><font></font><font style= "vertical-align: inherit;" ><font style= "vertical-align: inherit;" >
<b>粗體文字</ b></font></font><font></font><font style= "vertical-align: inherit;" ><font style= "vertical-align: inherit;" >
</ DIV></font></font><font></font>
<font></font><font style= "vertical-align: inherit;" ><font style= "vertical-align: inherit;" >
<script type =“text / javascript”></font></font><font></font>
<font></font><font style= "vertical-align: inherit;" ><font style= "vertical-align: inherit;" >
var rootnode = document.getElementById(“contentarea”)</font></font><font></font><font style= "vertical-align: inherit;" ><font style= "vertical-align: inherit;" >
var walker = document.createTreeWalker(rootnode,NodeFilter.SHOW_ELEMENT, null false )</font></font><font></font>
<font></font><font style= "vertical-align: inherit;" ><font style= "vertical-align: inherit;" >
</ SCRIPT></font></font>

在此示例中,我指定TreeWalker的根節點開始遍歷ID為“contentarea”的容器。 物件的第二個引數指定TreeWalker應該只對容器內的元素節點(與文字節點,註釋節點等)進行爬網。 第三個引數設定為null,表示不應該進行額外的過濾(尚未!)。 第4個引數涉及是否應擴充套件實體引用,並將其設定為false。 有了所有引數,“walker”現在引用DIV中的所有元素(P,SPAN和B)以及DIV本身。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69933200/viewspace-2652227/,如需轉載,請註明出處,否則將追究法律責任。

相關文章