Например, у меня есть HTML:
<ul id='myul'>
<li>
<a href="http://domain.com/link1">Link1</a>
<span>something1</span>
</li>
<li>
<a href="http://domain.com/link2">Link2</a>
<span>something1</span>
</li>
<li>
<a href="http://domain.com/link4">Link4</a>
<span>something1</span>
</li>
<li>
<a href="http://domain.com/link1">Link1</a>
<span>something1</span>
</li>
</ul>
Вы можете видеть, что href= http://domain.com/link1
повторяется. Итак, я хочу удалить одну из тем и сохранить только одну. Это означает, что у меня есть HTML:
<ul id='myul'>
<li>
<a href="http://domain.com/link1">Link1</a>
<span>something1</span>
</li>
<li>
<a href="http://domain.com/link2">Link2</a>
<span>something1</span>
</li>
<li>
<a href="http://domain.com/link4">Link4</a>
<span>something1</span>
</li>
</ul>
Как я могу сделать это с помощью jquery?
Вот первый способ, который пришел на ум:
$(document).ready(function(){
var urls = {};
$("#myul a").each(function() {
if (this.href in urls)
$(this).closest("li").remove();
else
urls[this.href] = true;
});
});
Демо: http://jsfiddle.net/CBhF6/
То есть, перебирайте все элементы привязки внутри ul и проверяйте, есть ли у текущего href, который вы уже видели, - если так удалить его, в противном случае обратите внимание на href.
Попробуй это:
$(function(){
$('#myul a').each(function(){
var currHref = $(this).attr('href');
$('#myul').find('a[href="' +currHref +'"]').each(function(index){
if(index > 0) {
$(this).closest('li').remove();
}
});
});
});
.each()
с внутренним тестом if, вы не могли бы просто сказать $('#myul').find('a[href="' +currHref +'"]').slice(1).closest('li').remove();
? jsfiddle.net/rKpaK/3
Вы можете использовать $ ("li").get(-1)
пока он последний
Пытаться:
var url = [];
$("#myul").find("li").each(function(){
var href = $(this).find("a").attr("href");
if(url.indexOf(href) >= 0){
$(this).remove();
}
else{
url.push(href);
}
});
Попробуй это:
var lnkHash = {};
$('li > a').each(function(){
if(lnkHash[this.href])
{
$(this).closest('li').remove();
} else
{
lnkHash[this.href] = 1;
}
});