什么是“”的parentNode?

时间:2013-08-30 06:26:59

标签: javascript dom

我试过了:

<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!
}

错误:

  

Uncaught NotFoundError:尝试引用a中的Node   它不存在的背景

因此,我怀疑,桌子不是tr的父母?

4 个答案:

答案 0 :(得分:2)

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

请参阅HTML 5 tree construction rules

  

8.2.5.4.9“在表格中”插入模式

     

...

     

标签名称为以下之一的开始标记:“td”,“th”,“tr”

     

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

     

为没有属性的“tbody”开始标记标记插入HTML元素,然后将插入模式切换为“在表格主体中”。

     

重新处理当前令牌。

答案 1 :(得分:1)

<table>在DOM中有一个隐式<tbody>,无论你是否在HTML中放置一个:{/ p>

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

Demo

答案 2 :(得分:1)

尝试

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

您应该添加空检查,例如

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

答案 3 :(得分:0)

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