好的,我有一个像这样走树的小功能:
function walkTree(node, func, args) {
func(node, args);
node = node.firstChild;
while (node) {
walkTree(node, func, args);
node = node.nextSibling;
}
}
另一个函数只会拾取文本节点,如下所示:
function selectTextNodes(node, nodes) {
if (node instanceof Text) {
nodes.push(node);
}
}
最后,同时使用:
texts = [];
walkTree(body, selectTextNodes, texts);
但是,它根本没有填满列表!
如果我要修改测试以使用Node.nodeType
它会起作用:
function selectTextNodes(node, nodes) {
if (node.nodeType == Node.TEXT_NODE) {
nodes.push(node);
}
}
另一方面,在控制台中它可以双向工作:
t = window.document.createTextNode("test");
r = (t.nodeType == Node.TEXT_NODE) && (t instanceof Text);
也就是说,r 为真。
请注意,所有函数都嵌套在另一个接收body
变量的函数中。就我而言,这是contentDocument.body
一个iframe
. 没有应用 x 域限制。
知道发生了什么吗?