我的代码中有一个表格,我将其用作查找表,方法是根据<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>
,有些只是空元素。我真的很困惑这个。
但是,如果我在一行中输入所有内容,我会得到正确数量的孩子。
<table>
<tr id="nas"><td>1.34</td><td>0.67</td><td>1</td><td>1.25</td></tr>
</table>
为什么你认为这种情况正在发生?
答案 0 :(得分: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所看到的。
答案 1 :(得分:1)
这里有一篇很好的文章解释了这个问题: https://developer.mozilla.org/en/whitespace_in_the_dom
答案 2 :(得分:0)
因为标签之间的换行被计为文本,并被转换为DOM中的文本节点。
答案 3 :(得分: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