$("#mydiv").append("<ul>");
$("#mydiv").append("<li>Hello</li>");
$("#mydiv").append("</ul>");
alert($("#mydiv").html());
產生
<ul></ul><li>Hello</li>
,而不是
<ul><li>Hello</li></ul>
?
謝謝!
$("#mydiv").append("<ul>");
$("#mydiv").append("<li>Hello</li>");
$("#mydiv").append("</ul>");
alert($("#mydiv").html());
產生
<ul></ul><li>Hello</li>
,而不是
<ul><li>Hello</li></ul>
?
謝謝!
因爲瀏覽器需要在每個追加之後(重新)建立自己的DOM。它不能知道結束標籤會晚些時候出現,並且開始標籤本身是無效的,因此在這種情況下糾錯將會關閉未關閉的元素。
這就是爲什麼innerHtml
和依賴它的東西(如jQuery的append方法)不可靠,應儘可能避免的原因之一。
爲了清楚起見,如果你傳遞HTML字符串片段,append只依賴於innerHtml。追加本身附加一個DOM節點;如果你傳入一個HTML字符串,它使用innerHTML創建一個DOM節點,然後像這樣附加。 – 2010-05-12 17:40:33
Append()追加DOM節點,而不是HTML標籤(即,它是一個對象追加,而不是字符串追加)。
當您追加<ul>
時,您將創建一個完整的UL節點,並且包含開始和結束標記。 </ul>
調用被忽略。
更好地說* HTML標記*而不是* HTML元素*。 – Gumbo 2010-05-12 15:45:10
謝謝,糾正。 – richardtallent 2010-05-12 15:48:06
嚴格來說,並不是每個HTML元素都是一個標籤。你可以附加一個TextNode,它不是:-) – Juriy 2010-05-12 15:50:36
因爲你不能附加未完成的HTML片段,所以你總是追加元素。對於你的情況,你有做任何
$("#mydiv").append("<ul></ul>");
$("#mydiv ul").append("<li>Hello</li>");
或
$("#mydiv").append("<ul><li>Hello</li></ul>");
你應該在這裏添加代碼。這樣即使外部資源消失,其他人也可以有機會看到整個問題。 – Juriy 2010-05-12 15:51:29