添加重复元素?

时间:2012-03-05 20:04:32

标签: jquery

这可以使用jQuery吗?

假设我有一个项目列表,附带了值,例如:

  1. 第1项:5
  2. Item2:10
  3. Item3:20
  4. Item2:15
  5. Item4:30
  6. Item2:25
  7. Item1:11
  8. 如何删除所有重复项并将删除的重复项中的整数添加到一个条目中,并使用jQuery输出:

    1. 第1项:16
    2. Item2:50
    3. Item3:20
    4. Item4:30
    5. 编辑:我找到了一个使用$ .each删除重复项的函数,但是我不知道从这里去哪里存储每次迭代的值并修改原始项的DOM。

      var seen = {};
      $('.variety_name').each(function() {
          var txt = $(this).text();
          if (seen[txt])
              $(this).parent().remove();
          else
              seen[txt] = true;
      });
      

2 个答案:

答案 0 :(得分:1)

简单修改您提供的代码(假设有关html):

<li class="item"><span class="name">Item1</span>: <span class="value">5</span></li>
<li class="item"><span class="name">Item2</span>: <span class="value">10</span></li>
<li class="item"><span class="name">Item3</span>: <span class="value">20</span></li>
<li class="item"><span class="name">Item2</span>: <span class="value">15</span></li>
<li class="item"><span class="name">Item4</span>: <span class="value">30</span></li>
<li class="item"><span class="name">Item2</span>: <span class="value">25</span></li>
<li class="item"><span class="name">Item1</span>: <span class="value">11</span></li>

var seen = {};
$('.name').each( function() {
      var txt = $(this).text();
      if (seen[txt] == undefined) {
          seen[txt] = $(this);
      } else {
          var val = seen[txt].next('.value');
          val.text( parseInt( val.text() ) + parseInt( $(this).next('.value').text() ) );
          $(this).parent().remove();
      }
});

如果您没有看到某个项目,请将该对象存储在seen中。当您看到它时,将当前项的值添加到存储对象的值,并删除当前项。

示例:http://jsfiddle.net/JyGc9/

答案 1 :(得分:0)

我不知道是否有直接的方式来做,但我可以写一些东西来实现,我可以使用哈希列表(表)或直接将结果注入dom;我将使用哈希列表: 我可以将HTML格式化为:

<ol id="mainList">
  <li><input type="hidden" value="5" name="item1"/> Item1: 5</li>
  <li><input type="hidden" value="10" name="item2"/> Item2: 10</li>
  <li><input type="hidden" value="20" name="item3"/> Item3: 20</li>
  <li><input type="hidden" value="15" name="item2"/> Item2: 15</li>
  ...
</ol>

和我的剧本:

function addDuplicates (){
  var main_list = $('#mainList') 
// Calculate the result list of items
  var item_list = main_list .find('input');
  var result = {}
  item_list.each(function (index){
    var list_name = $(this).attr('name')
    var list_val = $(this).val()
    if (typeOf(result[list_name])=='undefined')
      result[list_name]=list_val
    else
      result[list_name]=result[list_name]+list_val    
  });

// render the result list
  main_list.empty();
  $.each (result, function (index){
    main_list.append('<li><input type="hidden" value="'+result[index]+'" name="'+index+'"/>'+index+': '+result[index]+'</li>')
  }) 
}