jquery - 获取html返回的文本

时间:2013-03-28 18:10:48

标签: jquery ajax dom

这可能很简单,但我似乎无法找到答案......

我有一个返回html的ajax调用

 dataType: "html"

并且它返回'msg'看起来像:

<div id="x"><p>Hello</p></div>

然后将dom添加到父div的顶部:

ajax call...
request.done(function(msg) {
   $('#parent').prepend(msg);
}

问题是,我不想做这个dom操作,如果它的文本没有改变(因为有其他影响发生,我已被截断。(这是一个通知显示,检查一个更新)间隔)

所以,我想要做的是在msg中找到“Hello”并将其与当前可能已经在页面上的div x的p进行比较。第二部分很容易解决,但是第一部分,我需要做一些像msg.text()这样的东西才能获得“Hello”,但是我试过的一些变种都失败了。

指针?

5 个答案:

答案 0 :(得分:2)

使用filter()查找文字..

试试这个

$(msg).filter('div#x p').text(); //this  will give you hello

find()

 $(msg).find('div#x p').text();

答案 1 :(得分:0)

试试这个

$('#parent').prepend($(msg).text());

答案 2 :(得分:0)

所以你可以做到以下几点:

保留变量

中的previus查询中的文本
var previusData;

然后在第一个请求将该数据添加到变量后,您可以通过使用过滤器或类似的方式来执行此操作:

previusData = $("#x p").html();

然后在将其添加到DOM之前,通过添加新的varible

进行检查
request.done(function(msg) {
   var currData = $("#x p").html();
   if(currData != previusData){
     $('#parent').prepend(msg);
   }
}

答案 3 :(得分:0)

假设页面加载时没有出现“notice”并且在页面加载后它被取出,您可以使用全局变量(或命名空间)来保存响应的先前值以及每次收到新响应时,将其与已存储的响应相匹配;丢弃,如果没有改变;或使用如果更改并更新全局变量

var cached_response = '';
ajax call...
request.done(function(msg) {
   if(msg != cached_response){
      $('#parent').prepend(msg);
      cached_response = msg;
   }
}

答案 4 :(得分:0)

一种方法是,您可以使用正则表单替换所有html标签,如下所示:

$(document).ready(function() {
    var text = '<div id="x"><p>Hello</p></div>';
    console.log(text.replace(/(<([^>]+)>)/ig,""));
});

只需将此行放在脚本中,然后与数据进行比较。

以下是工作示例:http://jsfiddle.net/cGnG5/1/

另一种方法是在另一个答案中使用.filter()函数。