如何在jQuery中编写一个简单的预订DOM树遍历算法?

jon*_*eri 2 recursion jquery dom-traversal

我想在这里找到代码:http://www.jslab.dk/articles/non.recursive.preorder.traversal.part2

// HTML element
var root = document.documentElement;

recursivePreorder(root);

// Recusively find and handle all text nodes
function recursivePreorder(node) {  
  // If node is a text node
  if (node.type == 3) {
    // Do something with node
  }
  // else recurse for each child node
  else {
    for(var i=0; i<node.childNodes.length; i++)
      recursivePreorder(node.childNodes[i]);
  }
}
Run Code Online (Sandbox Code Playgroud)

并将其转换为干净的jQuery.

任何的想法?我知道递归需要argument.callee,因为jQuery中的回调是匿名的,但我对JQuery来说太新了,无法继续使用它.

谢谢!

K P*_*ime 9

正如Code Duck指出的那样,jQuery以源顺序遍历节点,深度优先 - 或者,正如您所说,预先订购.但是,contents只能获得直接的子节点,而不是后代.试试这个:

$(document).contents ().each (function processNodes ()
{
    if (this.nodeType == 3)
        doSomething (this); // do something with text node
    else
        $(this).contents ().each (processNodes);
});
Run Code Online (Sandbox Code Playgroud)

另外,arguments.callee标记为弃用,因此命名(而不是匿名)函数