5

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

我有一个返回 html 的 ajax 调用

 dataType: "html"

它返回的“味精”看起来像:

<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() 的事情来获得“你好”,但我尝试的一些变种失败了。

指针?

4

5 回答 5

2

用于filter()查找文本..

试试这个

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

或者find()

 $(msg).find('div#x p').text();
于 2013-03-28T18:14:38.563 回答
1

因此,您可以执行以下操作:

将先前查询中的文本保存在变量中

var previusData;

然后在第一个请求将该数据添加到变量之后,您可以使用过滤器或像这样执行此操作:

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

然后在将其添加到 DOM 之前通过添加新变量进行检查

request.done(function(msg) {
   var currData = $("#x p").html();
   if(currData != previusData){
     $('#parent').prepend(msg);
   }
}
于 2013-03-28T18:19:28.847 回答
1

假设页面加载时不存在“通知”并且在页面加载后获取它,您可以使用全局变量(或命名空间)来保存响应的先前值,并且每次收到新响应时,匹配它针对已经存储的响应;如果没有改变则丢弃;或使用 if changed 并更新全局变量

var cached_response = '';
ajax call...
request.done(function(msg) {
   if(msg != cached_response){
      $('#parent').prepend(msg);
      cached_response = msg;
   }
}
于 2013-03-28T18:20:39.027 回答
1

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

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

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

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

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

于 2013-03-28T18:22:34.393 回答
0

试试这个

$('#parent').prepend($(msg).text());
于 2013-03-28T18:19:17.850 回答