为了账号安全,请及时绑定邮箱和手机立即绑定

移除函数求解,为什么用要给table节点加lastChild才能生效?

为什么这里移除子节点的函数是这样的:

function removeChilds(obj){

    var tbody=document.getElementById("table").lastChild;  //注意这里,有个lastChild,我就是这里不明白,求解

    var tr=obj.parentNode.parentNode;

    tbody.removeChild(tr);

}

在这里,tbody的最后还加了个lastChild,可是要删除的tr行的父元素不就是<table>吗?这里加个lastChild是什么意思?


正在回答

3 回答

table习惯上常常把标签<tbody></tbody> 省略,但是在dom中他默认有tbody这一层,所以获取的是<tbody></tbody>里面内容,其顺序为:thead、tfoot、tbody. lastChild节点是指其父节点的最后一个节点tbody

1 回复 有任何疑惑可以回复我~
#1

六月ovo 提问者

意思是在DOM里面,table的树结构是这样的:??? <table> <thead> <tr> <th><th/> <td></td> </tr> </thead> <tfoot> <tr> <th><th/> <td></td> </tr> </tfoot> <tbody> <tr> <th><th/> <td></td> </tr> </tbody> </table> 结构是上面这样的吗?如果只有两行,怎么知道lastChild是tbody而不是tfoot呢? 还是默认省略的话都是tbody? 求解答~~
2017-01-20 回复 有任何疑惑可以回复我~
#2

你不懂的前端

var tbody = document.getElementById('table').lastChild; 这段代码是tr的父节点tbody 那tr不是应该为tr=tbody.childnodes 可是为什么var tr = obj.parentNode.parentNode;理解不了 求解答 谢谢 或者说var tr = obj.parentNode.parentNode; 这该怎么理解
2017-02-12 回复 有任何疑惑可以回复我~

Table 对象集合

集合描述

cells[]    返回包含表格中所有单元格的一个数组。    

rows[]    返回包含表格中所有行的一个数组。    

tBodies[]    返回包含表格中所有 tbody 的一个数组。    

所以var tbody = document.getElementById('table').lastChild;其实是cells层。

参考http://www.w3school.com.cn/jsref/dom_obj_table.asp


0 回复 有任何疑惑可以回复我~

lastChild 属性返回指定节点的最后一个子节点,以 Node 对象。

0 回复 有任何疑惑可以回复我~
#1

六月ovo 提问者

我知道lastChild返回的是最后一个子节点,但是在文档结构中的table表格中,table的最后一个子节点就是tr,不可能用tr子节点删掉自己的。在学习removeChild()的时候说过,移除子节点需要有父节点。所以这里我就不明白了。不过楼下有人说清楚啦,是默认省略了 tbody 这一层。table.lastChild就是tbody,这个才是tr的父元素
2017-01-20 回复 有任何疑惑可以回复我~
#2

上好佳_1 回复 六月ovo 提问者

同不明白,按顺序来说应该是 thead,tbody,tfoot啊,lastChild应该是tfoot才对呀
2017-02-05 回复 有任何疑惑可以回复我~
#3

六月ovo 提问者 回复 上好佳_1

在DOM中默认是有tbody这一层的,但是在HTML文档中并没有写出来,如果HTML中要用tbody,则需要thead、tfoot和tbody三个一起使用,这个时候DOM中才会看到thead和tfoot。HTML中不使用这三个的结构,则在DOM中tr的外层默认是tbody。
2017-02-07 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

移除函数求解,为什么用要给table节点加lastChild才能生效?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信