Как я могу удалить div имеет тот же URL и сохранить только значение?

0

Например, у меня есть 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?

Теги:

5 ответов

3
Лучший ответ

Вот первый способ, который пришел на ум:

$(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.

  • 0
    Спасибо за помощь. Я проверю на мой код.
  • 0
    Еще раз спасибо @nnnn. Это прекрасно.
1

Попробуй это:

$(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(); 
            }
        }); 
    });
});

http://jsfiddle.net/rKpaK/2/

  • 0
    Вместо того, чтобы иметь вложенный .each() с внутренним тестом if, вы не могли бы просто сказать $('#myul').find('a[href="' +currHref +'"]').slice(1).closest('li').remove(); ? jsfiddle.net/rKpaK/3
1

Вы можете использовать $ ("li").get(-1)

пока он последний

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);
    }
});

Заклинай здесь.

1

Попробуй это:

var lnkHash = {};

$('li > a').each(function(){

    if(lnkHash[this.href])
    {
      $(this).closest('li').remove();
    } else
    {
      lnkHash[this.href] = 1;
    }
});

http://jsfiddle.net/c4zVk/1/

Ещё вопросы

Сообщество Overcoder
Наверх
Меню