2012-06-20 5 views
2

Я хочу скрыть все остальные LI в определенном UL, кроме выбранного мной LI.Скрыть все буквы LI, кроме выбранных

<ul> 
    <li><div></div></li> 
    <li><div></div></li> 
</ul> 
<ul> 
    <li><div></div></li>  -- HIDE 
    <li><div></div></li>  -- SELECT 
    <li><div></div></li>  -- HIDE 
</ul> 
<ul> 
    <li><div></div></li> 
    <li><div></div></li> 
</ul> 

Как я могу решить эту проблему наилучшим образом?

Я пробовал использовать индексы, но некоторые проблемы с его работой и выбор правильного UL. Как вы можете видеть, у меня нет класса в UL или LI, поэтому я считаю, что единственным вариантом является LI.

То, что я на самом деле, является выбором DIV внутри LI так, я получаю выбранный индекс LI пути:

var li_index = $(this).parent().index(); 

ответ

2

Вы пересекать DOM вверх от DIV, которая была нажата, то скрыть другие элементы с .not($(this).parent()).toggle() -> Не li, что окружает этот div

$('div').click(function() { 
    $(this).closest('ul').find('li').not($(this).parent()).toggle(); 
}); 

.toggle() можно заменить .hide(), если вы не хотите Пользователь может отменить свое решение.

JS Fiddle: http://jsfiddle.net/tDmy3/2/

+0

Я получил событие щелчка на Div Thats внутри тега LI .. – ffffff01

+0

Обновлено в соответствии – ActiveDan

+0

Подходит моя потребность :) Спасибо – ffffff01

2

Пытался что-то вроде этого?

$(this).closest('ul').find('li').not(this).hide(); 

Или

$('li', $(this).closest('ul')).not(this).hide(); 
0

Получить элемент JQuery набор со всеми соответствующими <li> элементов, а затем удалить выбранный элемент. Например:

$('ul#mylist li').not(selector).hide(); 

От JQuery documentation:

Данный объект JQuery, который представляет собой набор элементов DOM, метод .not() создает новый объект JQuery из подмножества согласующих элементов , Поставляемый селектор проверяется на каждый элемент; элементы, которые не соответствуют селектору, будут включены в результат.

Вместо селектора вы также можете указать объект элемента, если у вас есть ссылка на него.

0

Это должно работать:

$('ul li').click(function(e) { 
     // by default, hide all li's 
    $('ul li').hide(); 
     // show only the selected li 
    $(this).show(); 
}); 

http://jsfiddle.net/BqKun/

Надеется, что это помогает.