2015-02-24 51 views
1

構建TreeWalker時,爲什麼currentNode指向根,儘管它可能無法通過過濾條件?爲什麼TreeWalker currentNode默認爲根節點?

我希望它是null,直到我調用nextNode,以便我可以看到根是否傳遞過濾條件傳遞給它。

我想這是它設計的方式,我只是不太明白原因。它不適合我查找具有特定屬性集的所有元素的用例,包括根。如果我去根的父母,我包括我不想要的兄弟姐妹。

回答

1

current node不代表最後一次方法調用的結果,但它表示步行的當前狀態,即從中進行下一步的節點。它絕不能爲空,而且實際上可能是一個不能通過過濾器的節點 - 它可以任意設置(不僅可以通過步驟方法手動設置)。

只有所有方法調用的返回值都是過濾節點,可以是null

它不適合我查找具有特定屬性集(包括根)的所有元素的用例。

使用parentNode method最終應該讓你的根節點,如果它的過濾器,或null匹配,否則。

+0

我認爲TreeWalker的設計有缺陷,但也許我錯過了一些東西。無論如何,我已決定使用我自己的自定義實現。可能比本機慢,但它的工作原理。我將接受答案,這似乎是標準實施的唯一選擇。 – dave 2015-02-26 13:34:59

+0

@dave:事實上,我認爲目前在規範中的['nextNode'算法](https://dom.spec.whatwg.org/#dom-treewalker-nextnode)也是錯誤的,因爲它永遠不會登上樹。 – Bergi 2015-02-26 13:52:58

0

currentNode指向根,因爲它可以遞歸地遍歷文檔子樹,調用每個childNode作爲它自己的樹的根。它不一定指向文檔的根目錄,只是樹創建的root節點。請參閱tree traversal

+0

我將根設置爲文檔中的元素。我不明白它爲什麼被設計的原因,以便我指定的根不包含在TreeWalker的遍歷中。如果nextNode檢查currentNode是否爲null並嘗試處理它,那將是微不足道的。 – dave 2015-02-24 15:40:27

+0

如果您將根設置爲null,就像您所建議的那樣,您如何調用nextNode? null根的nextNode將爲空 – 2015-02-24 15:42:31

+0

我*不*設置根爲空。在構造函數中,我傳遞了一個非空節點。我希望nextNode測試該節點,並在它通過我指定的過濾器時返回它。所以,我期望TreeWalker構建後立即* currentNode *爲null,但不是隻讀的根。 – dave 2015-02-24 15:45:25