什么's是“”的parentNode<tr>"

What's the parentNode of a "<tr>" ?

本文关键字:lt parentNode tr gt quot 什么      更新时间:2023-09-26

我试过这个:

<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:

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的父级吗?

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

参见HTML 5树构造规则:

8.2.5.4.9"表内"插入模式

一个起始标签,其标签名称为:"td"、"th"、"tr"之一

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

为没有属性的"tbody"起始标记标记插入一个HTML元素,然后将插入模式切换到"在表体"。

重新处理当前令牌。

<table>在DOM中有一个隐含的<tbody>,无论您是否在HTML中放置一个:

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

演示

尝试

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

你应该添加一个空检查,比如

if(child != null && child.parentNode != null)
    child.parentNode.removeChild(child);  
else
    alert("NULL reference");

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