2012-01-09 73 views
2

我正在尋找使用jQuery來確定當前頁面是否發生了上游變化,如果是,請執行一些操作。我想通過使用jQuery選擇器對AJAX調用返回的數據執行此操作(對於此問題,我的「頁面已更改」度量標準將「具有第一個<h1>的內容更改」)。在AJAX響應數據上使用jQuery

因此,我發現自己希望使用AJAX get()返回的HTML上的jQuery選擇器。 「最好」的「解決方案」,我發現迄今是數據附加到一些隱藏的div,並使用了一個選擇,如下:

var old_title = $('h1').html(); 

$.get(url, function(data) { 
    $('#hidden_temporary_storage').append(data); 
    var new_title = $('#hidden_temporary_storage h1').html(); 
    if (new_title !== old_title) { 
     do_something(); 
    } 
}); 

這感覺非常錯誤的 - 我會嵌套html/head/body標籤,並且會有id碰撞等等。

我無法控制上游頁面,所以我不能只是「以更方便的格式獲取數據」唉。

+0

理想情況下,您將避免查詢不需要的數據。如果可能,請嘗試根據請求定製答案以滿足您的需求。 – kontur 2012-01-09 13:23:29

+0

根據最後一行「我無法控制上游頁面」 – 2012-01-09 13:51:40

+0

arghh ...什麼時候我會學習閱讀!我的壞:) – kontur 2012-01-09 14:01:03

回答

3

你可以這樣做:

var x = $('<div>'+data+'</div>').find('h1').html(); 
// use x as you like 

即你不需要返回的數據添加到您的網頁,以便能夠得到其內定義的HTML元素屬性和值。這樣就不會有ID衝突,多頭/身體標籤等。

+0

我只是試過,它不工作。 $( '

bob
').find('。TOTO')。HTML()(返回null) – 2012-01-09 13:32:26

+0

'$()'剝去頭部,身體等,並返回只有裏面的元素列表HTML字符串的主體。例如:'$('

你好

bob
')'返回一個2個對象的列表,即h1和div與類toto。 – techfoobar 2012-01-09 13:38:05

+0

是的,如果你試圖找到$(htmlstring).find('。myclass')它會返回null;) – 2012-01-09 13:40:20

1

我認爲你最好的選擇就是使用iFrame。 然後在該iFrame的內容上使用jQuery。

var old_title = $('h1').html(); 

$.get(url, function(data) { 
    $('<iframe id="tmpContent"></iframe>').appendTo("html"); 
    $('#tmpContent').contents().find('html').html(data); 
    var new_title = $('#tmpContent').contents().find('h1').html(); 
    if (new_title !== old_title) { 
     do_something(); 
    } 
    $('#tmpContent').remove(); 
}); 
+0

當然,iframe會好得多,不是嗎? – 2012-01-09 13:53:03