2010-10-04 3 views
1

Может ли кто-нибудь помочь мне с этим JQuery?JQuery получить все элементы в списке

У меня есть группа элементов списка, и при нажатии одной из них я хочу удалить атрибут класса 'selected' из каждого элемента списка в том же UL.

У меня есть яваскрипт функция:

<script type='text/javascript'> 

function clearSelectedCSS(item) { 

    $(item).parent().$('li.itemselected').removeClass('itemselected'); 

} 
</script> 

Это называется через OnClick часть каждого LI, и «это» передаются.

Я не могу понять JQuery, может ли кто-нибудь дать мне указатель? Мой код в основном хочет выбрать элемент, который был нажат, получить его родительский элемент, а затем выбрать все элементы списка, принадлежащие этому родителю (т. Е. Все ли в списке, который был нажат, который имеет класс «itemselected»), а затем удалить класс ' itemselected 'от них всех.

ответ

1
$(item).parent().find('li.itemselected').removeClass('itemselected'); 
+0

Удивительное спасибо! – NibblyPig

3

Нет необходимости, чтобы получить .parent(), когда вы можете просто захватить the .siblings():

$(item).siblings('.itemselected').removeClass('itemselected'); 

Это будет более эффективным, поскольку .parent().find() испытает все нижестоящих элементов. Даже если вы сделали .parent().children(), вы добавляете ненужный обход.


EDIT: Я не уверен, что от вопроса, если вы хотите включить тот, который был щелкнул в удалении класса.

Если да, то вы можете сделать это:

$(item).parent().children('.itemselected').removeClass('itemselected'); 

или

$(item).siblings().andSelf().filter('.itemselected').removeClass('itemselected'); 
+0

См. Мой ответ, почему они не эквивалентны. – lonesomeday

+0

@lonesomeday - У нас есть тот же ответ. Что не эквивалентно? – user113716

+0

$ (item) .parent(). Children() включает исходный элемент, $ (item) .siblings() - нет. – lonesomeday

0

Если вы хотите выбрать все Лис, за исключением той, которая была нажата, вы можете использовать $().siblings():

$(item).siblings('li.itemselected').removeClass('itemselected'); 

Используя parent().find('li.itemselected'), будет включен щелчок <li>.

0

Я играл с этим, пока я не получил эту работу:

<head>  
<script> 
    function clearSelectedCSS(item) { 
     $('#' + item.parentElement.id + ' > li').removeClass('exampleClass'); 
    } 
</script> 
</head> 

<body> 
<form id="form1"> 
    <ul id="List1"> 
     <li class="exampleClass" onclick="clearSelectedCSS(this)">First Item</li> 
     <li class="exampleClass" onclick="clearSelectedCSS(this)">Second Item</li> 
     <li class="exampleClass" onclick="clearSelectedCSS(this)">Third Item</li> 
    </ul> 

    <ul id="List2"> 
     <li class="exampleClass" onclick="clearSelectedCSS(this)">Fourth Item</li> 
     <li class="exampleClass" onclick="clearSelectedCSS(this)">Fifth Item</li> 
     <li class="exampleClass" onclick="clearSelectedCSS(this)">Sixth Item</li> 
    </ul> 

</form> 
</body> 
</html> 

В принципе, я должен был обратиться к родителю элемента, чтобы получить объект <ul> контейнер, а затем используется селектор > ребенка, чтобы получить сборник <li>. В этот момент звонок .removeClass() работает правильно. Надеюсь, что поможет ...

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