1

我试过了:</p>

<table id ="table1">
<tr id ="aa"><td>aa</td></tr>
<tr id ="bb"><td>bb</td></tr>
</table>
<input type="button" onclick = "test()" value = "button">

和javascript:</p>

function test(){
    var parent=document.getElementById("table1");
    var child=document.getElementById("aa");
    parent.removeChild(child);  //this isn't work 
    //child.parentNode.removeChild(child);  this is ok!
}

错误:

未捕获的 NotFoundError:尝试在不存在的上下文中引用节点

因此,我怀疑,table 不是 tr 的父级吗?

4

4 回答 4

3

在这种情况下,父元素是 a <tbody>(开始和结束标记是可选的)。

请参阅HTML 5 树构造规则

8.2.5.4.9 “in table”插入模式

…</p>

一个起始标签,其标签名称是以下之一:“td”、“th”、“tr”

将堆栈清除回表上下文。(见下文。)

为没有属性的“tbody”开始标记插入 HTML 元素,然后将插入模式切换为“in table body”。

重新处理当前令牌。

于 2013-08-30T06:28:38.463 回答
1

<table>s 在 DOM 中具有隐式<tbody>含义,无论您是否将其放入 HTML 中:

console.log(child.parentNode.nodeName); // TBODY
console.log(child.parentNode.parentNode.nodeName); // TABLE
console.log(child.parentNode.parentNode == parent); // true

演示

于 2013-08-30T06:29:19.277 回答
1

尝试

var child = document.getElementById("aa");
child.parentNode.removeChild(child);  

您应该添加一个空检查,例如

if(child != null && child.parentNode != null)
    child.parentNode.removeChild(child);  
else
    alert("NULL reference");
于 2013-08-30T06:29:47.637 回答
0

TR 的父节点是 TBODY。如果未定义,浏览器会自动创建 TBODY。

于 2013-08-30T06:29:18.803 回答