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'); 原有的两行不能删除,为什么??
是的,楼上的同学正解。表的结构应该是table->tbody->tr->td这样的顺序,细节大概是这样,每个表有两个儿子节点,大儿子是表头,小儿子是tbody(可惜很重要很关键起承上启下作用的小儿子tbody在老师的讲义里没提,造成了我们做题时的困惑),而我们看到的所有行也就是所有记录都是tbody生的儿子,也就是table的孙子。当楼主你去掉lastChild时,变量tbody(注意这里老师起的变量名tbody其实已经说明了一切)就不是真正的tbody而是table了,只有父节点才能删除子节点,table是行记录的爷爷,怎么能删掉孙子呢?所以这个lastChild(小儿子)属性是绝对不能删掉的
明白了 你看下你去掉.lastChild以后你去掉的是在<tbody>外面的行 你可以审查元素看下 <tbody>没有显示出来但是是table的下一级元素
我也遇到了同样的问题 我就觉得不应该写.lastChild 可是答案里有 然后也不能删除原来的两行 希望楼下大牛解答
首先,每一行都有一个删除按钮,所以只需要删除本行即可,不需要删除table元素的最后一个节点。然后看你的tbody现在指的是table元素最后一个tr节点,tr节点怎么能够移除同是兄弟节点的tr元素呢?我把你的代码编译了一下,系统提示我移除的不是其子节点,具体愿意我也不太清楚,希望能有朋友帮忙解答一下。