2010-11-11 48 views
2

是否可以將完整的HTML文檔解析爲完整的jQuery對象?當我嘗試,例如來自完整HTML文檔的jQuery對象

var $tmp = $("<html><head><title>title</title></head><body><p id='test'>test</p></body></html>"); 
console.log($tmp); 

我得到:

[+] [title, p#test] [] 

即陣列中的所有頭的孩子相結合的人體所有的。是否有可能保留該結構,包括html,head和body元素?

+0

你爲什麼要包裝htmlwith $符號? – kobe 2010-11-11 15:01:24

+0

@gov - 這就是在jQuery中創建元素的方式。 – user113716 2010-11-11 15:04:36

+0

@patrick,我們可以簡單地使用一個字符串concatination並在右端做一個.html。 – kobe 2010-11-11 15:12:09

回答

1

的jQuery剔除了html和身體只能有一個HTML和身體文件內。布賴恩的答案是最接近你可以得到的,但只有在非IE瀏覽器,因爲IE不解析非HTML標籤。

例如:

var test = "<test>This is it</test>"; 
alert($(test).html()); // display This is it in non IE browser (working in 8-9?). 

編輯: 如何用DIV CLASS = HTML /體取代HTML和身體?

var test = "<html><body><div>this is a test</div></body></html>"; 
test = test.replace(/(\/body|\/html)/i, "\/div") 
      .replace(/html/i, "div class='html'") 
      .replace(/body/i, "div class='body'"); 
console.log($(test)); 
+0

你至少可以在** DOM **中創建額外的'html'和'body'元素,至少在某些實現中(只在WebKit中使用'document.createElement'進行測試)。你甚至可以將它們追加到其他元素('element.appendChild')。 jQuery取消了這些功能,因爲在開發人員希望這樣做的常見使用情況下,這種做法非常罕見,但很常見的是,他們只想將某個服務器響應從Ajax調用轉儲到某個「div」中。 – eyelidlessness 2010-12-23 09:41:54

+0

@eylidlessness,你是對的,我在FF中測試將第二個body添加到html(不在div內)並且顯示第二個body,但是在IE中,不顯示第二個body。我想,我會堅持「正確」的HTML構造:)。 – Jules 2010-12-23 23:15:10

0

我認爲jQuery使用瀏覽器的原生innerHTML來創建這種情況下的元素。因此,一些瀏覽器允許它,其他瀏覽器則不允許。我認爲它會在Firefox中工作,但不是IE。

也許你可以嘗試使用本機document.createElement()拼湊在一起。不知道它是否會起作用。

+0

謝謝,帕特里克。在Firefox中沒有運氣。我真正想要做的只是使用jQuery的核心功能來解析通過AJAX獲取的HTML文檔。看起來我必須自己做更多的工作...... – 2010-11-11 15:26:54

+0

@Bobby - 不客氣。是的,這可能需要一些手動解析,具體取決於你想要達到的目標。 – user113716 2010-11-11 16:07:21

0

一種黑客會將字符串替換爲'html'以外的其他字符。

var tmp = '<html><head><title>title</title></head><body><p id="test">test</p></body></html>'; 
tmp = tmp.replace(/html/g, 'html1'); 
console.log($(tmp)); 

我不知道,雖然我很喜歡想法...