parentNode.removeChild没有删除元素,为什么?

时间:2014-07-05 17:34:24

标签: javascript

经过多次改变和尝试后,我仍然无法理解为什么这不起作用。 Process函数旨在删除带有“def”类的段落。它正在加载正文后执行,并且getElementsByClassName方法能够找到它,正如警报函数所示,但由于某种原因它无法删除,为什么?

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<script language="javascript">

function Process()
{
var elements = document.getElementsByClassName('def');

var elem = elements[0];
alert(elem.className);
elem.parentNode.removeChild(elem);

}
</script>
</head>
<body onload="Process();">
<h1>This is a title</h1>
<p>Sample Paragraph</p>
<p>This should not be interpreted by the Wiki</p>
<p class="def"><p id="definition">Text</p></p>
</body>
</html>

提前致谢。

1 个答案:

答案 0 :(得分:2)

<p class="def">确实会删除。 <p id="definition">Text</p>保留的原因是因为将p标记放在p标记内无效。 DOM解析器将<p id="definition"><p class="def">中删除,它们将成为兄弟元素。

请参阅W3C section on the p tag,了解p标记内不允许使用的标记。

  

P元素代表一个段落。它不能包含块级   元素(包括P本身)。

而不是使用

<p class="def"><p id="definition">Text</p></p>

尝试使用

<p class="def"><span id="definition">Text</span></p>