larrylarry
2016-10-05 17:08
为什么必须要使用getElementById("table").lastChild,这里使用lastChild的结果为什么不是table的最后一个tr呢?
定义和用法
<tbody> 标签表格主体(正文)。该标签用于组合 HTML 表格的主体内容。
tbody 元素应该与 thead 和 tfoot 元素结合起来使用。
thead 元素用于对 HTML 表格中的表头内容进行分组,而 tfoot 元素用于对 HTML 表格中的表注(页脚)内容进行分组。
注释:如果您使用 thead、tfoot 以及 tbody 元素,您就必须使用全部的元素。它们的出现次序是:thead、tfoot、tbody,这样浏览器就可以在收到所有数据前呈现页脚了。您必须在 table 元素内部使用这些标签。
我是这样测试的,现实的结果很明白。
window.onload = function(){ var ta=document.getElementById("table").childNodes; // alert(ta.length) //提示为2. document.write( "ta[0].nodeType:" + ta[0].nodeType+ "<br/> ta[0].nodeName" + ta[0].nodeName + "<br/> ta[1].nodeType:" +ta[1].nodeType + "<br/> ta[1].nodeName:"+ ta[1].nodeName ); // alert(ta[1].childNodes.length) //提示为6,也就是我们以为的table里的子节点数目,实际是在 //table的childNodes[1].childNodes里 }
ta[0].nodeType:3
ta[0].nodeName#text
ta[1].nodeType:1
ta[1].nodeName:TBODY
这下就明白为什么要是使用 document.getElementById("table").lastChild 了,希望可以帮到你。
用chrome的开发者工具发现table标签下多了一层tbody标签,猜测浏览器会给table标签里自动添加tbody标签,tr都是放在tbody里面,所以getElementById("table").lastChild指的应该是tbody标签,不过table的子标签只有一个tbody,按理说用firstChild应该也可以,但是实测却是不可以,感觉有点儿懵圈~
除了IE忽略空格等,其他浏览器都认为是其子节点,比如<p><span></span></p>,p的最后一个子节点是span;如果是<p><span></span> </p>,就是nodeName为#text的文本节点。
应该是不是tr
JavaScript进阶篇
468194 学习 · 21891 问题
相似问题