2014-02-14 13 views
2

我想删除具有相同标题和src的重复条目,但我不知道如何。JS根据属性删除重复的div

<ul> 
    <li><img class="test" src="secret/photo.jpg" title="Tester1"></li> 
    <li><img class="test" src="secret/photo.jpg" title="Tester2"></li> 
    <li><img class="test" src="secret/photo.jpg" title="Tester2"></li> 
    <li><img class="test" src="secret/photo2.jpg" title="Tester2"></li> 
    <li><img class="test" src="secret/photo2.jpg" title="Tester2"></li> 
</ul> 

结果应该是

<li><img class="test" src="secret/photo.jpg" title="Tester1"></li> 
<li><img class="test" src="secret/photo.jpg" title="Tester2"></li> 
<li><img class="test" src="secret/photo2.jpg" title="Tester2"></li> 

我用这个功能,但它不能正常工作。

function unique(array) { 
    return $.grep(array, function(el, index) { 
     return index == $.inArray(el, array); 
    }); 
} 

谢谢

+1

请发表您的数组,你传递给你的函数。 – Manu

+0

它不起作用。 – newbie

回答

1

尝试

var $lis = $('ul li').filter(function() { 
    var $img = $(this).find('img'), 
     src = $img.attr('src'), 
     title = $img.attr('title'); 
    return $(this).nextAll('li:has(img[src="' + src + '"][title="' + title + '"])').length == 0 
}) 

$('ul li').not($lis).remove() 

演示:Fiddle

+0

谢谢。 :)你的代码真的有帮助。 – newbie

1

这里是一个working fiddle

运算符==仅在元素相同时才返回true,如果它们具有相同的内容则不是。然后,你必须存储数组标题,然后检查标题是否在数组中。

function unique(array) { 
    var titles = []; 
    return $.grep(array, function (el, index) { 
     var $img = $('img', el); 
     if ($.inArray($img.prop('title'), titles) >= 0) { 
      return false; 
     } 
     titles.push($img.prop('title')); 
     return true; 
    }); 
} 

我以这种方式将数组值传递到函数中。

unique($('li')) 

如果你想通过这样的事情unique($('li img'))你可以,但你必须改变这一行var $img = $('img', el);太(var $img = $(el);足够在这种情况下)。

1

这是一个解决方案,它通过连接标题和img的URL来创建一个字符串,然后检查列表中的唯一字符串。

<ul id="myul"> 

的JavaScript/JQuery的(给ID myulul后):

uniqueLi = {}; 

$("#myul li").each(function() { 
    var thisTxt = $('img', this).attr("title"); 
    var thisImg = $('img', this).attr("src"); 
    var uString = thisTxt.concat(thisImg); 
    if (!(uString in uniqueLi)) { 
     uniqueLi[uString] = ""; 
    } else { 
     $(this).remove(); 
    } 
}) 

的jsfiddle:http://jsfiddle.net/B6A2B/