这可能很简单,但我似乎无法找到答案......
我有一个返回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”,但是我试过的一些变种都失败了。
指针?
答案 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()函数。