jQuery:检查具有相同属性的元素是否存在多次

时间:2016-09-16 17:10:52

标签: jquery loops attributes removechild

我想检查一个具有相同数据属性的元素是否在jQuery每个循环中存在多次,如果存在多次删除它并且只保留一个具有此数据属性的元素。

我试过这段代码,但似乎没有用,

HTML:

<div class="list" data-productid="2"></div> // KEEP THIS ONE

<div class="list" data-productid="3"></div>

<div class="list" data-productid="2"></div> // REMOVE THIS ONE

<div class="list" data-productid="2"></div> // REMOVE THIS ONE

我在jQuery中的方法:

$('.list').each(function(){

if ( $(this).attr(data-productid).length > 0 ) {

$(this).remove();


}

});

任何想法的人,

谢谢!

3 个答案:

答案 0 :(得分:2)

您需要跟踪数组或对象中的每一个。然后,当发现重复时,可以删除它们

var productIds={};
$('.list').each(function(){
    var prodId = $(this).attr('data-productid');
    if(productIds[prodId]){
       $(this).remove();
    }else{
       productIds[prodId] = true;
    }
});

您可以搜索每个DOM的DOM,但这要贵得多,特别是如果您有一个大列表

答案 1 :(得分:2)

你可以删除任何不是第一个的傻瓜:

$('.list').each(function(){
   $('[data-productid='+$(this).data('productid')+']:not(:first)').remove();
});

-DEMO-

答案 2 :(得分:0)

这样做。参考工作演示

&#13;
&#13;
<html>
<head></head>
<title></title>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>

<style>

</style>

<body>

<div class="list" data-productid="2">one</div> 

<div class="list" data-productid="3">two</div>

<div class="list" data-productid="2">one</div> 

<div class="list" data-productid="2">one</div> 



<script type="text/javascript">

var isin = [];
$('div.list').each(function(){
	var data_product = $(this).attr('data-productid');
	if(isin[data_product])
	{
		$(this).remove();
	}
	else
	{
		isin[data_product] = true;
	}
	
});

</script>
</body>

</html>
&#13;
&#13;
&#13;