经过多次改变和尝试后,我仍然无法理解为什么这不起作用。 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>
提前致谢。
答案 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>