这可以使用jQuery吗?
假设我有一个项目列表,附带了值,例如:
如何删除所有重复项并将删除的重复项中的整数添加到一个条目中,并使用jQuery输出:
编辑:我找到了一个使用$ .each删除重复项的函数,但是我不知道从这里去哪里存储每次迭代的值并修改原始项的DOM。
var seen = {};
$('.variety_name').each(function() {
var txt = $(this).text();
if (seen[txt])
$(this).parent().remove();
else
seen[txt] = true;
});
答案 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
中。当您看到它时,将当前项的值添加到存储对象的值,并删除当前项。
答案 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>')
})
}