私はDOMについてもっと学ぼうとしていて、いくつかのトラバーサルスクリプトを書いています。私が思いついたアルゴリズムは、私がやっていたことの一部ではうまく機能しましたが、それをHTMLドキュメントの本文全体に適用すると、混乱しました。HTMLは次のとおりです。
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8' />
<title>Lumen Tests</title>
<link rel='stylesheet' href='../../qunit/qunit.css' />
</head>
<body>
<div id='qunit'></div>
<div id='qunit-fixture'></div>
<div id='wrapper'>
<div id='header'></div>
<div id='content'>
<p id='para'>Lorem ipsum dolor sit amet.</p>
</div>
<div id='footer'></div>
</div>
<script src='../../qunit/qunit.js'></script>
<script src='../lib/traverse.js'></script>
<script src='../lib/lumen.js'></script>
<script src='features.js'></script>
</body>
</html>
そしてJavaScript:
(function () {
'use strict';
function toArray(list) {
var array = [],
len = list.length,
i = 0;
while (i < len) {
array[i] = list[i];
i += 1;
}
return array;
}
function Traverse() {
var that = this;
this.allTags = function (node) {
var context = node || document.body,
children = [],
array = [],
len,
i = 0;
children = toArray(context.childNodes);
len = children.length;
while (i < len) {
if (children[i].nodeType === 1) {
array.push(children[i]);
array = array.concat(that.allTags(children[i]));
}
i += 1;
}
return array;
};
}
var foo = new Traverse();
window.Traverse = foo.allTags;
}());
alert(Traverse());
document.getElementById('wrapper')
これで、この設定はトラバーサル関数に渡したときに問題なく機能しますが、使用するためにそのままにしておくと、2つの要素document.body
しか取得できません。script
これをChrome20.0.1132.34、Firefox 11.0、およびIE 9でテストしたところ、すべて同じ結果になりました。テストを通じて、アルゴリズムが何も渡さないことを発見しました。childNodes
プロパティdocument.body
の長さは10で、配列に変換して警告すると、出力はtext、div、text、div、text、div、textになります。 、スクリプト、テキスト、スクリプト。childNodes
最後の2つのスクリプトタグを取得しない理由を説明できる人はいますか?ありがとうございました!