2011-12-23 4 views
1

У меня есть список, в котором мне нужно выбрать элемент (в соответствии с заголовком attr <a> внутри <li>) на загрузку страницы и удалить остальные элементы списка, кроме выбранного.нахождение li с определенным заголовком и удаление остальных li

Используя это:

$("#div").find("a[title='Previous Page']").not(this).remove(); 

ее не работает.

http://jsfiddle.net/ymhrF/16/

ответ

0
$("#custom_pagination").find("a").not('[title="umm"]').parent('li').remove(); 

Если вы хотите сохранить его как одну строку кода.

0
$("li") 
    .each(function(){ 
     if($(this).find("a").is("[title='yourTitle']")){ 
      $(this) 
       .siblings() 
       .remove(); 
     } 
    }); 

Example.

Или вы могли бы сделать его немного более просто:

$("li") 
    .find("a[title='yourTitle']") 
    .parent() 
    .siblings() 
    .remove(); 

Example.

Но это работает только в том случае, если существует один тег a, где атрибут title равен yourTitle (или любой другой титул, который вы решите искать).

+0

Ya это работает, но если нет элементов, которые совпадающих название, чем результат показывает весь список –

+0

Просто добавьте 'else' в' if', который удаляет все 'li' элементы. – Purag

1

Логика я последую за это:

  • Возьмите все элементы списка (li)
  • Выберите те, которые не имеют ребенка a, который имеет указанный заголовок (это очень легко с помощью filter метод, который я очень рекомендую знакомясь с)
  • Удалить выбранный один

один из способов вы можете выполнить этот план:

$('#list li') 
    .filter(function() { 
     return !$(this).has('a[title="Previous Page"]').length; 
    }) 
    .remove(); 

Вы могли бы написать функцию фильтрации в многих способов (используйте find() вместо has() или использовать какое-то комбинированные селекторы), но я действительно думаю, что вы должны использовать filter(). Это делает ваш код более читаемым и хорошо описывает, что происходит на самом деле.

jsFiddle Demo

Смежные вопросы