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

deleteRow(obj)函数,问题

function deleteRow(obj){

        var tbody = document.getElementById('table').lastChild;    

        var tr = obj.parentNode.parentNode;

    tbody.removeChild(tr);    

     }

        var tbody = document.getElementById('table').lastChild;    修改为        var tbody = document.getElementById('table');  原有的两行不能删除,为什么??

正在回答

4 回答

是的,楼上的同学正解。表的结构应该是table->tbody->tr->td这样的顺序,细节大概是这样,每个表有两个儿子节点,大儿子是表头,小儿子是tbody(可惜很重要很关键起承上启下作用的小儿子tbody在老师的讲义里没提,造成了我们做题时的困惑),而我们看到的所有行也就是所有记录都是tbody生的儿子,也就是table的孙子。当楼主你去掉lastChild时,变量tbody(注意这里老师起的变量名tbody其实已经说明了一切)就不是真正的tbody而是table了,只有父节点才能删除子节点,table是行记录的爷爷,怎么能删掉孙子呢?所以这个lastChild(小儿子)属性是绝对不能删掉的

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

明白了   你看下你去掉.lastChild以后你去掉的是在<tbody>外面的行 你可以审查元素看下  <tbody>没有显示出来但是是table的下一级元素

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

我也遇到了同样的问题  我就觉得不应该写.lastChild     可是答案里有  然后也不能删除原来的两行  希望楼下大牛解答

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

首先,每一行都有一个删除按钮,所以只需要删除本行即可,不需要删除table元素的最后一个节点。然后看你的tbody现在指的是table元素最后一个tr节点,tr节点怎么能够移除同是兄弟节点的tr元素呢?我把你的代码编译了一下,系统提示我移除的不是其子节点,具体愿意我也不太清楚,希望能有朋友帮忙解答一下。

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

举报

0/150
提交
取消

deleteRow(obj)函数,问题

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