2

<td>のIDに基づいていくつかの値を取得することにより、ルックアップテーブルとして使用しているコードにテーブルがあります<tr>

<table>
<tr id="nas">
<td>1.34</td>
<td>0.67</td>
<td>1</td>
<td>1.25</td>
</tr>
</table>

上記のようにテーブルを入力するとdocument.getElementById("nas").childNodes.length、結果は9になりますが、要素の子要素は4つしかないことは明らかです<tr id="nas">。子要素<td>のいくつかは値を持つ実際の要素であり、いくつかは単なる空の要素です。私はこれと本当に混乱しています。

ただし、テーブルをすべて1行で入力すると、正しい数の子が取得されます。

<table>
<tr id="nas"><td>1.34</td><td>0.67</td><td>1</td><td>1.25</td></tr>
</table>

なぜこれが起こっていると思いますか?

4

4 に答える 4

2
childNodes
0 <TextNode textContent="\n">   
1 td
2 <TextNode textContent="\n">
3 td
4 <TextNode textContent="\n">
5 td        
6 <TextNode textContent="\n">
7 td
8 <TextNode textContent="\n">

誰がテキストノード、ブラウザ、またはjavascriptパーサーを作成するのか正確にはわかりませんが、それがjavascriptが見ているものです。

于 2011-09-07T18:48:27.923 に答える
1

ここに問題を説明する良い記事があります: https ://developer.mozilla.org/en/whitespace_in_the_dom

于 2011-09-07T19:11:57.377 に答える
0

タグ間の改行はテキストとしてカウントされ、DOMのテキストノードに変換されるためです。

于 2011-09-07T18:48:58.963 に答える
0

childNodesには、すべてのchildNodesが含まれ、テキストノード(つまり、セル間の空白)が含まれます。次のようなものを試してください。

var children = document.getElementById('nas').childNodes,
    count = 0,
    len = children.length;

for (var i = 0; i < len; i++) {
    // make sure it's type ELEMENT_NODE
    if (children[i].nodeType === 1) { count++ }
}

alert(count); // 4
于 2011-09-07T18:49:57.590 に答える