如何比较两个jquery对象数组并复制选择差异?

时间:2014-10-01 16:23:15

标签: jquery arrays

如何比较差异和复制选择部分的数组对象?

我有两个html列表。

<ul id="listOne">
   <li data-info="a" data-infoTwo="x">One</li>
   <li data-info="b" data-infoTwo="y">Two</li>
   <li data-info="c" data-infoTwo="z">Three</li>
</ul>

<ul id="listTwo">
   <li data-info="a">One</li>
   <li data-info="b">Two</li>
   <li data-info="d">Four</li>
</ul>

我将列表作为对象推送到数组中。

var listOneArray = [];
var listTwoArray = [];

  $('#listOne li').each(function () {
     listOneArray.push(this);
  });

  $('#listTwo li').each(function () {
     listTwoArray.push(this);
  });

如果对象data-info在两个数组中匹配,我想比较数组。

如果data-info与每个数组的每个对象匹配。我想将data-infoTwo对象信息从一个对象复制到另一个对象。

所以当我将数组推回到listTwo时,它看起来就像这样。

<ul id="listTwo">
   <li data-info="a" data-infoTwo="x">One</li>
   <li data-info="b" data-infoTwo="y">Two</li>
   <li data-info="d">Four</li>
</ul>

3 个答案:

答案 0 :(得分:4)

你可以这样做:

$('#listOne li').each(function () {
    $("#listTwo li[data-info=" + $(this).data("info") + "]").data("infoTwo", $(this).data("infoTwo"));
});

答案 1 :(得分:2)

由于你没有在评论中回答我的问题,我认为你可以使用选择器来做,所以我们走了:

$('#listOne li').each(function(){
    var listOne=$(this);
    $('#listTwo li').each(function(){
        if(listOne.data('info')==$(this).data('info')){
            $(this).data('infoTwo',listOne.data('infoTwo'));
        }
    });
});

答案 2 :(得分:0)

为什么不迭代你需要复制的元素并从第二个数组中获取目标元素,而不是试图比较你的两个列表?

$('#listOne li[data-infoTwo]').each(function(){
    var info = $(this).data('info'),
        infoTwo = $(this).data('infoTwo');
    $('#listTwo li[data-info="' + info + '"]').data('infoTwo', infoTwo);
});