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来说太新了,无法继续使用它.
谢谢!
正如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标记为弃用,因此命名(而不是匿名)函数