javascript - jquery比较两个div,得到差异

标签 javascript jquery html css

我正在尝试制作 ajax 更新程序。现在我有了 div:

<ul class='topStatsOuter'>
   <li class='liClass'>custom text</li>
   <li class='liClass'>custom text two</li>
   <li class='liClass'>custom text three</li>
</ul>

更新 ul 类:

success: function( result ) {                   
    $( '.topStatsOuter' ).empty()

    $.each( result.updatedtopics, function( id, topics )
    {
        $( '.topStatsOuter' ).append( topics.html );
    });
}

如何比较未更新的原始 div 与更新的 div 中的内容?

例如更新后的 div 看起来像这样:

<ul class='topStatsOuter'>
   <li class='liClass'>ajax added this li</li>
   <li class='liClass'>custom text</li>
   <li class='liClass'>custom text two</li>
   <li class='liClass'>custom text three</li>
</ul>

我想改变样式:更新后的背景,添加的li,(ajax added this li)这可能吗?看起来我想区分两个 div。谢谢,抱歉我的英语不好。


编辑。看起来这就是我想要的: http://jsfiddle.net/AzZHy/

最佳答案

不是清空 ul 而是删除所有 li 并保留其引用,稍后在追加时检查文本内容并提供样式。

success: function(result) {
  // remove the element from ul and keep it's reference
  var $li = $('.topStatsOuter li').detach();

  $.each(result.updatedtopics, function(id, topics) {
    // wrap html with jQuery, append it to ul and keep it's refernece
    var $ele = $(topics.html).appendTo('.topStatsOuter');
    // compare content with old elements, use filter for exact match
    // or use `:contains()`, eg: if($li.filter(':contains(' + $ele.text().trim() + ')').length){ ... }
    if ($li.filter(function() {
      // check contents are the same after trimming the whitespace
      return $(this).text().trim() == $ele.text().trim();
    }).length)
      // if old element with same content exist then update style
      $ele.css('background', 'red')
  });
}

var arr = ["<li class='liClass'>ajax added this li</li>",
  "<li class='liClass'>custom text</li>",
  "<li class='liClass'>custom text two</li>",
  "<li class='liClass'>custom text three</li>"
];

var $li = $('.topStatsOuter li').remove();

$.each(arr, function(id, html) {
  var $ele = $(html).appendTo('.topStatsOuter');
  if ($li.filter(function() {
    return $(this).text().trim() == $ele.text().trim();
  }).length)
    $ele.css('background', 'red')
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul class='topStatsOuter'>
  <li class='liClass'>custom text</li>
  <li class='liClass'>custom text two</li>
  <li class='liClass'>custom text three</li>
</ul>

关于javascript - jquery比较两个div,得到差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41912281/

相关文章:

javascript - 使用变量创建动态 json 元素

javascript - 将业务对象序列化为 JSON

javascript - 如何结合 jquery 响应与 php

html - 非字母数字的输入方向 rtl 问题

javascript - 在 angularjs 中仅重新加载页面一次

序列化 Groovy 映射到 JS 文字对象的 Javascript 解析

javascript - 通过 jQuery 根据其深度删除 HTML 元素

javascript - 使用 jQuery 或 JavaScript 查找 2 个数字的倍数和余数

javascript - 如何使用 CSS 为动态创建的元素设置样式

javascript - 单击 jQuery/JavaScript,列出 ID 的名称