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

jQuery: Check if an element with the same attribute exists more than once

我想检查具有相同数据属性的元素是否在 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();


}

});

任何想法伙计们,

谢谢!

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

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

您可以在 DOM 中搜索每一个,但这要贵得多,尤其是如果您的名单很大

这样做。参考工作演示

<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>

您可以删除任何不是第一个的欺骗:

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

-DEMO-