2016-10-06 2 views
0

나는이 두 UL의 이러한 처음의 '의 BOTH <ul>에서의'의 <li>에서 '활성'클래스를 제거하고 '활성'클래스를 적용하면됩니다 싶습니다 무엇JQuery : 이벤트 위임을 사용할 때 모든 선택 자에 조치를 적용 할 수 있습니까?

<ul id="ul_one"> 
    <li>list item</li> 
    <li>list item</li> 
    <li class="active">list item</li> 
</ul> 
<ul id="ul_two"> 
    <li>list item</li> 
    <li>list item</li> 
    <li class="active">list item</li> 
</ul> 

아래로 단지 클릭 한 항목. 예를

내가 위임을 사용하고있는 사실을 감안할 때
$('#ul_one, #ul_two').on('click', 'li', function(e) 
{ 
    var clicked = e.target; 
    $('#ul_one, #ul_two').find('li.active').removeClass('active'); 
    $(clicked).addClass('active'); 
}); 

를 들어, 내가 다시 이름을 참조하지 않고 모두 <ul> 's의 클래스를 제거 할 수있는 방법이있다. 그래서 그 대신 말의 :

$('#ul_one, #ul_two').find('li.active').removeClass('active'); 

은 내가 말할 수있는 같은 :

$('ALL items in the original selector').find('li').removeClass('active'); 
+0

'li.active'를 타겟팅하는 것만으로는 충분하지 않습니까? 예 : https://jsfiddle.net/avs19ajk/ –

+0

아니요, 이것은 단순화 된 예입니다. 실제로이 기능을 사용하고 싶지 않은 액티브 리가있는 다른 ul도 있습니다. – Typhoon101

답변

1

가장 좋은 점은 ULS에 캐시하는 것입니다.

var uls = $('#ul_one, #ul_two'); 
uls.on('click', 'li', function() { 
    uls.find('li.active').removeClass('active'); 
    $(this).addClass('active'); 
}); 
+1

매력처럼 작동합니다. 아주 간단합니다. 감사 – Typhoon101