2014-07-05 71 views
0

經過多次更改和嘗試,我仍不明白爲什麼這不起作用。處理函數旨在刪除「def」類的段落。正在加載正文後執行,並且getElementsByClassName方法能夠找到它,如警告函數所示,但由於某種原因它無法刪除,爲什麼?parentNode.removeChild不移除元素,爲什麼?

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

在此先感謝。

回答

2

<p class="def">確實得到刪除。 <p id="definition">Text</p>停留的原因是因爲將p標記放在p標記內是無效的。 <p id="definition">被DOM解析器從<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> 
+0

因此,在嵌套的段落情況下,是去除內段和後外一個只有這樣,才能刪除這兩個段落?我在哪裏可以找到更多關於他們爲什麼成爲兄弟元素的信息?我對這件事一無所知...... – BirdyBiker

+0

@BirdyBiker你實際上不能在'p'標籤中放置'p'標籤。這是無效的,瀏覽器將(最可能)通過關閉打開的「p」標籤來嘗試解決問題以啓動新的標籤。我在規範的答案中添加了一個鏈接,指出哪些標籤不允許使用'p'標籤。 –

+0

好的,我認爲已經理解了這個問題。總之:它不能被這樣刪除,因爲作爲一段無效HTML代碼的後果,「內部段落」從未被解釋爲子元素。我在幹什麼? :) – BirdyBiker