2013-01-21 93 views
0

我試圖解析使用jQuery一些HTML,像這樣簡單的例子:讓jQuery的不放棄某些元素

$('<html><body><div><p>Test</p></div></body>') 

現在,生成的對象是一個有點失望。 當我使用.html()函數時,我應該獲取根元素中的所有內容。

不幸的是,jQuery丟棄<html><body> & <head>標籤。

所以我得到:

$('<html><body><div><p>Test</p></div></body>').html() 
"<p>Test</p>" 

取而代之的是身體。 它將第一個看作根元素。

我可以用這個:

$('<html><body><div><p>Test</p></div></body>')[0].outerHTML 
"<div><p>Test</p></div>" 

但我還沒有,我想解析標籤。

那麼,我該如何解決這個問題? 可以以某種方式創建一個新的jQuery dom窗口對象嗎?

+0

我不認爲這是可能的,即使有Vanilla.JS –

+0

@JanDvorak - 它適用於我在香草JS:'document.createElement('body')'工作得很好。 –

回答

1

我不知道爲什麼你使用這個,但你的問題的解決方案(如果最好不知道)是使用的方法.append()

$('<html>').append('<body>').append('<div>').append('<p>Test</p>'); 

這將創建一個<html>標籤,將填補它與其他元素。

+0

它在某種程度上起作用,是的。但我需要解析整個給定的字符串。以後不要追加。一旦你像這樣給html標籤添加屬性,它就會停止工作 – skerit

1

當您將jQuery傳遞給HTML字符串時,它會創建文檔片段,而不是整個文檔。因此,它不會包含您詢問的部分,例如<body><head>

如果您需要所有這些部件,您可以創建與iframe不同的東西。

1

奇怪的是,這完全在Chrome和火狐瀏覽器:

$('<html>').html('<html><body><div><p>Test</p></div></body>') 

添加在<head>標籤沒有任何打破它。

一旦你添加一個<body>標籤到原來的選擇,它停止工作:

> $('<html></html>') 
[<html>​</html>​] 
> $('<html><body></body></html>') 
[] 
+0

這是迄今爲止最好的方法,但它總是會返回一個body和一個head標籤,即使它沒有給出。 – skerit

1

我敢肯定jQuery不會允許你這樣做。但是,你可以把文檔作爲XML和解析這樣的說法:

$.parseXML('<html><body><div><p>Test</p></div></body></html>').childNodes[0] 

$.parseXML創建一個XML文檔,.childNodes[0]將是<html>節點。

+0

這是一個有趣的想法!它在XHTML上可以很好地工作,但不幸的是並不是所有的HTML都是有效的XML。 – skerit