jQuery - 获取HTML元素的文本内容

5

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

我有一个ajax调用,它返回html

 dataType: "html"

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

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

并且这个被添加到父div顶部的dom:

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

问题是,如果文本没有更改,我不想进行DOM操作(因为还有其他被截断的影响)。 (这是一个在间隔中检查更新的通知显示)。
所以,我的意思是在msg中找到“Hello”,并将其与可能已经在页面上的当前div x的p进行比较。解决第二个部分很容易,但我需要做的第一部分是类似于msg.text()这样的事情,只需获取“Hello”,但我尝试过的一些变化失败了。
指针?
5个回答

2

使用filter()来查找文本..

试试这个

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

或者find()

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

谢谢,但似乎这并不起作用。它给了我一个空字符串(空警报)。 - BReal14
返回 null... 很有趣.. 你尝试过使用 find() 吗?因为你已经将响应指定为 HTML.. find() 是从对象中获取元素的另一种方式..$(msg).find('div#x p').text() ; - bipen
更新了我的回答.. 无论如何欢迎.. 很高兴能帮到你... :).. 祝编码愉快.. :) - bipen

1
那么你可以这样做: 将前一个查询的文本保存到变量中。
var previusData;

在第一次请求之后,将该数据添加到变量中,您可以使用filter或类似方法来实现此操作:

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

在将其添加到DOM之前,通过添加一个新变量进行检查

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

1
假设“通知”在页面加载时不存在,并且在页面加载后获取,您可以使用全局变量(或命名空间)来保存响应的先前值,并且每次收到新的响应时,将其与已存储的响应进行匹配;如果未更改,则丢弃;如果更改,则使用并更新全局变量。
var cached_response = '';
ajax call...
request.done(function(msg) {
   if(msg != cached_response){
      $('#parent').prepend(msg);
      cached_response = msg;
   }
}

这是为了半实时检查内容更新而在页面加载时内联加载的。 - BReal14

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()函数,如另一个答案所述。


0

试一试

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接