【问题标题】:jquery - get text of html returnjquery - 获取html返回的文本
【发布时间】:2013-03-19 07:47:26
【问题描述】:

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

我有一个返回 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() 的操作才能获得“Hello”,但我尝试的一些变体失败了。

指针?

【问题讨论】:

    标签: jquery ajax dom


    【解决方案1】:

    使用filter() 查找文本..

    试试这个

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

    find()

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

    【讨论】:

    • 谢谢,但这似乎不起作用。它给了我一个空字符串(空白警报)。
    • 给出 null... 有趣.. 尝试使用 find(),因为您已将响应指定为 HTML.. find() 是从对象获取元素的另一种方法..$(msg).find('div#x p').text() ;
    • 更新了我的答案.. 无论如何欢迎.. 很高兴它有帮助... :).. 快乐编码..:)
    【解决方案2】:

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

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

    var previusData;
    

    然后在第一次请求后将该数据添加到变量中,您可以使用过滤器或类似这样:

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

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

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • 它在页面加载时内联加载。这是为了半实时检查内容的更新。
      【解决方案4】:

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

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

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

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

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

      【讨论】:

        【解决方案5】:

        试试这个

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

        【讨论】:

          猜你喜欢
          • 2015-02-21
          • 2015-11-08
          • 1970-01-01
          • 1970-01-01
          • 2011-10-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多