OK、私はこのようにツリーを歩く小さな関数を持っています:
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 ドメイン制限はありません。
何が起こっているのか分かりますか?