【面向JS--DOM 遞迴API】
阿新 • • 發佈:2019-01-28
1、NodeIterator
按照深度優先的順序,依次遍歷每個節點物件
深度優先: 優先遍歷一個節點的下級節點,只有下級節點遍歷完,才遍歷兄弟節點
如何使用: 2步:
1、建立NodeIterator物件:
var iterator = document.createNodeIterator(
root, whatToShow, filter,entityReferenceExpansion);
iterator就站在開始父節點上
用到的四個引數意義如下:
1、root:從樹中的哪個節點開始搜尋; 2、whatToShow:一個數值程式碼,代表哪些節點需要搜尋; 3、filter:NodeFilter物件,用來決定需要忽略哪些節點,不想使用它的話,可以留空(null); 4、entityReferenceExpansion:布林值,表示是否需要擴充套件實體引用; whatToShow引數可以有下列這些常量或其組合的取值: 1、NodeFilter.SHOW_ALL:搜尋所有節點; 2、NodeFilter.SHOW_ELEMENT:搜尋元素節點; 3、NodeFilter.SHOW_ATRRIBUTE:搜尋特性節點; 4、NodeFilter.SHOW_TEXT:搜尋文字節點; 5、NodeFilter.SHOW_ENTITY_REFERENCE:搜尋實體引用節點; 6、NodeFilter.SHOW_ENTITY:搜尋實體節點; 7、NodeFilter.SHOW_PROCESSING_INSTRUCTION:搜尋PI節; 8、NodeFilter.SHOW_COMMENT:搜尋註釋節點; 9、NodeFilter.SHOW_DOCUMENT:搜尋文件節點; 10、NodeFilter.SHOW_DOCUMENT_TYPE:搜尋文件型別節點; 11、NodeFilter.SHOW_DOCUMENT_FRAGMENT:搜尋文件碎片節節; 12、NodeFilter.SHOW_NOTATION:搜尋記號節點;
最簡單的訪問所有節點的NodeIterator物件,可以使用下面的程式碼:
var iterator = document.createNodeIterator(document, NodeFilter.SHOW_ALL, null, false);
2、迴圈呼叫iterator,遍歷每個節點物件
返回當前節點,然後跳到下一個節點 var currNode=iterator.nextNode() 倒退一步,返回當前節點 var prevNode=iterator.previousNode() 迴圈條用 while((node=iterator.nextNode())!=null){ node//當前節點 }
2、TreeWalker
可選擇跳轉方向的迭代器,基本功能和NodeIterator完全一樣
相同: 開始時都站在開始父元素上
不同: 添加了下面一些遍歷方法
parentNode(): 跳到父節點
firstChild(): 跳到第一個子節點
lastChild(): 跳到最後一個子節點
previousSibling(): 跳到前一個兄弟節點
nextSibling(): 跳到後一個兄弟節點
<html>
<head>
<title>dom中的NodeIterator物件示例</title >
<script>
function makelist(){
var divnode = document.getElementById("div1");
var
FILTER= new Object();
FILTER.acceptNode = function(node){
return (node.tagName == "P") ? NodeFilter.FILTER_REJECT : NodeFilter.FILTER_ACCEPT;
}
var iterator = document.createTreeWalker(divnode, NodeFilter.SHOW_ELEMENT, FILTER, false);
var oput = document.getElementById("textarea1");
var node = iterator.nextNode();
while(node){
oput.value += node.tagName +"\n";
node = iterator.nextNode();
}
}
</script>
</head>
<body>
<div id="div1">
<p>你好<b>TreeWalker!</b></p>
<ul>
<li>列表項一</li>
<li>列表項二</li>
<li>列表項三</li>
<li>列表項四</li>
</ul>
</div>
<textarea id="textarea1" rows="10"></textarea><br />
<input type="button" value="生成列表" onclick="makelist()" />
</body>
</html>