Treewalker迭代

Dar*_*lyn 5 javascript

是否可以跳过当前子树中的迭代并使用treewalker跳转到下一个节点?例

<nav>
    <p>paragraph</p>
    <ul>
        <li>one</li>
        <li>two</li>
    </ul>
    <p>paragraph</p>
</nav>
Run Code Online (Sandbox Code Playgroud)

和js

var nav=document.getElementsByTagName("nav")[0];
    var tree=document.createTreeWalker(nav,NodeFilter.SHOW_ELEMENT,null,false);
    tree.firstChild(); // first paragraph
    tree.nextSibling(); // ul
    tree.firstChild(); // first li chid of ul
    tree.nextNode()||tree.nextSibling() // both return next li
Run Code Online (Sandbox Code Playgroud)

有没有办法如何停止子树的迭代,并在treewalker点击第一个LI元素后直接跳到另一个段落?

Ber*_*rgi 4

您可以创建自定义过滤器

var filter = {
    acceptNode: function(n) {
        return n && n.parentNode && n.parentNode.tagName != "UL"
          ? NodeFilter.FILTER_ACCEPT
          : NodeFilter.FILTER_REJECT;
    }
};
var tree=document.createTreeWalker(nav, NodeFilter.SHOW_ELEMENT, filter, false);
Run Code Online (Sandbox Code Playgroud)