2012-04-05 119 views
6

這是一個超級簡單的問題,我似乎無法找到一個好的答案了。jQuery GET html作爲遍歷jQuery對象

$.get('/myurl.html', function(response){ 
    console.log(response); //works! 
    console.log($(response).find('#element').text()); //null :(
}, 'html'); 

我只是想遍歷我的html響應。到目前爲止,我能想到的唯一辦法就是將正則表達式內置到body標籤中,並將其用作字符串來創建我的遍歷jQuery對象。但那似乎很愚蠢。任何人都在意指出正確的方式來做到這一點?

也許是我的html?

<html> 
    <head> 
     <title>Center</title> 
    </head> 
    <body> 
     <!-- tons-o-stuff --> 
    </body> 
</html> 

這也工作正常,但並不適合我的需求:

$( '#myelem')負載( '/ myurl.html #element');

+1

如果您在響應html中尋找具有值爲「element」的「id」屬性的某個元素,那麼它對我來說看起來是正確的。我不知道爲什麼這不起作用。 – jessegavin 2012-04-05 16:44:07

+1

你提取的html是怎麼樣的? – 2012-04-05 16:44:15

+0

這應該回答你的問題: http://stackoverflow.com/questions/9540218/a-javascript-parser-for-dom/9540313#9540313 – 2012-04-05 16:46:07

回答

7

它失敗了,因爲它不喜歡<html><body>

使用此處介紹的方法:A JavaScript parser for DOM

$.get('/myurl.html', function(response){ 
    var doc = document.createElement('html'); 
    doc.innerHTML = response; 

    console.log($("#element", doc).text()); 
}, 'html'); 

我覺得上面應該工作。

+0

工作。但爲什麼? – Fresheyeball 2012-04-05 17:01:49

+0

我需要看看jQuery如何解決這個問題的內部細節。基本上jquery有一個方法,當它給出html字符串參數時,它如何構建dom對象。這很簡單,與包含'body'和'html'標籤的html字符串不兼容,但幸運的是它不是唯一的方式,上面的方式是一種不同的方式。 – 2012-04-05 17:08:33

+0

這真的很有趣。 – Fresheyeball 2012-04-05 17:44:15

0

嘗試這種情況:

$("#element", $(response)).text() 

此搜索在$(響應)的元素ID處理$(響應),爲DOM對象。

+0

response.responseText未定義 – Fresheyeball 2012-04-05 16:50:38

1

當jQuery解析HTML時,它通常會去掉html和body標籤,所以如果您正在搜索的元素位於文檔結構的頂層,一旦html和body標籤被移除,那麼find函數可能會無法找到您正在搜索的元素。

有關進一步信息這一問題 - Using jQuery to search a string of HTML

+0

這不是頂級物品。 – Fresheyeball 2012-04-05 17:04:09

-1

也許我誤解的東西,但

.find('#element') 

用的ID匹配的元素 「元素,」 像

<p id="element"> 

由於我沒有看到「噸的東西」HTML我不明白你試圖找到什麼元素。

+1

這不是大衛的答案。將它作爲評論發佈會更合適。 – 2012-04-05 18:30:00