2012-02-16 47 views
1

它是正確的,這個代碼jQuery和param組件

$('<param><div></div></param>') 

,輸出結果?

[<param>, <div></div>] 

而與大多數其他標籤(例如:部)

$('<section><div></div></section>') 

產生

[<section>...</section>] 

換句話說,jquery的似乎除去param元素中的元素,並將它們沿着它。我知道你通常不會將dom元素放在param標籤中。但我使用jQuery來遍歷一個XML文檔,並遇到了這個問題。

解決方法是什麼?

+3

jQuery希望html不是xml,在html中'param'是一個自閉標記,不能有子元素,所以jQuery爲您修復了這個問題。解決方法是使用XML解析器.. I.E'jQuery.parseXML' – Esailija 2012-02-16 12:48:12

+0

我不認爲jQuery修復任何東西,它使用'innerHTML'(jQuery使用它)。 'document.getElementById('mydiv')。innerHTML ='

''具有相同的效果。 – 2012-02-16 13:07:46

回答

4

正如我在評論說,jQuery的預計HTML不是XML,在HTML param是一個自閉標記,不能有子節點,所以jQuery會爲您修復這個問題。

你可以試試:

$($.parseXML('<param><div></div></param>')).children() 

其中給出:

[<param>...</param>] 
1

你應該開始創建一個有效的XML文檔:

var xml ='<param><div></div></param>'; 
var xmlDoc = $.parseXML(xml); 

然後你就可以在這個文檔工作:

var $xml = $(xmlDoc); 
0

標籤參數是一個自動關閉標籤,它不能包含其他元素inside.μ

當應用<param><div></div></param> ,它固定爲<param><div></div>,所以你得到jQuery對象中的兩個元素。

例如與<input><div></div></input>相同。
輸入自動關閉,這導致到<input><div></div>

我不認爲jQuery的修復它,它很簡單,因爲jQuery使用innerHTML

document.getElementById('mydiv').innerHTML = '<param><div></div></param>'; 
// you'll get two child elements <param> + <div>