问答详情
源自:9-22 编程练习

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');  原有的两行不能删除,为什么??

提问者:qq_啊啦嘞_0 2016-06-29 21:54

个回答

  • 红袖侍读
    2016-07-07 14:20:20

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

  • 慕用6930380
    2016-07-01 18:16:42

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

  • 慕用6930380
    2016-07-01 17:22:30

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

  • GiveMeGeek
    2016-06-30 00:09:25

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