2012-01-09 71 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