2010-12-15 5 views
1
여기

와 현재의 리튬을 제외하고 정렬되지 않은 목록에있는 모든 리튬의에서 클래스를 제거 내가 투명 리튬의 중 하나에 앵커를 클릭하면 내가 opaque로 설정하려는추가 jQuery를

<ul class="checklist"> 
    <li class="opaque"><a href="">Link</a></li> 
    <li class="transparent"><a href="">Link</a></li> 
    <li class="transparent"><a href="">Link</a></li> 
</ul> 

내 HTML 구조입니다 다른 모든 리가 ul 안에 있고 transparent입니다.

효율적으로 수행하는 방법에 대한 아이디어가 있으십니까? 이 같은

답변

7

당신은 이런 식으로 뭔가를 할 수 , 그 중 어느 것이 제 2 주를 나타내는가?

$('document').ready(function(){ 
    $('ul.checklist').find('a').click(function(){ 
    $(this) 
     .parent().addClass('opaque') 
     .siblings().removeClass('opaque'); 
    }); 
}); 
+0

+1 용 상태 분석 용 –

+0

+1 점에 대해 약 2 개 주; 나는 또한'closest' 대신에'find' ('parent' 대신에)를 사용하거나'find'를 사용하지 않을 것을 제안합니다. 이와 같은 경우 재귀를 일관되게 적용하는 것이 좋습니다 (예 : 도처 또는 아니요). –

0

뭔가 :

$('document').ready(function(){ 
    $('ul.checklist').find('a').click(function(){ 
    $(this) 
     .parent().addClass('opaque').removeClass('transparent') 
     .siblings().addClass('transparent').removeClass('opaque'); 
    }); 
}); 

을하지만 당신이 정말로에만 함께 발생하지 않을 두 가지 상태를 표현하는 경우, 왜 그냥 하나 개의 클래스를 사용

$('.checklist a').click(function(){ 
    $(this).closest('li') // get current LI 
     .removeClass('transparent') 
     .addClass('opaque') 
     .siblings() // get adjacent LIs 
     .removeClass('opaque') 
     .addClass('transparent'); 
}); 
+1

더 나은 선택이 될 것'.checklist이> 리 그렇지 않으면'li' 중복 A'입니다> –

+0

좋은 지적, 감사, 셰인 그럼 당신이이있을 것이다 –

0

이 솔루션에 대해 어떻게 :

$("li.transparent a").bind("click", function(){ 
    $("ul.checklist li").attr("class", "transparent"); 
    $(this).parent().attr("class", "opaque"); 
}); 
+0

'attr' 대신'addClass' /'removeClass'를 사용하는 것이 좋습니다. 코드가 더 간단하고 다른 사례 (예 : 현재 문제와 관련없는 여러 클래스)를 처리합니다. –

+0

그래, 그 트릭을 했어. 매우 감사합니다! – Daelan

+0

@Micheal 일반적으로 add/removeClass를 사용합니다. 그러나이 경우에는 모든 CSS 클래스를 제거하는 것이 더 유용 할 수 있다고 생각했습니다. – Luca