2011-09-11 6 views
0

링크에 특정 클래스가 있는지 여부에 관계없이 링크가있는 스팬에서 클래스를 교체해야합니다. 이것을 시도했지만 작동하지 않는 것 같습니다. 내가 뭘 놓치고 있니?jquery가있는 toggleClass

if ($("#myLink").hasClass("dis")) { 
    $("#myLink").find("span").toggleClass("uico", "uicoGR"); 
} else { 
    $("#myLink").find("span").toggleClass("uicoGR", "uico"); 
} 

<a href="#" id="myLink" class="dis"><span class="uico"></span></a> 

답변

3

공간으로 구분 첫번째 파라미터로 전달되어야 전환 할 수있는 두 개의 클래스 이름이.

또한 hasClass() 조건을 선택기에 추가 할 수 있습니다. 다시 질문을 읽기

$('.dis#mylink span').toggleClass('uico uicoGR') ; 

편집

, 당신이 toggleClass()가 무엇을 감사하는 것이 분명하지 않다. 이 함수는 명명 된 모든 클래스를 찾아서 찾지 못하면 추가하거나 그렇지 않으면 제거합니다. 이후에는 세 번째 클래스가 있는지 여부에 따라 클래스를 추가하거나 제거하는 것으로 나타납니다.

$('#mylink').each(function() { 
    if($(this).hasClass('dis')) { 
    $(this).find('span').addClass('uicoGR').removeClass('uico') ; 
    } else { 
    $(this).find('span').addClass('uico').removeClass('uicoGR') ; 
    } 
}) ; 
3

클래스는 공간에 의해 분리 된, 단일 문자열 파라미터로 전달되어야 예컨대 :

$("#myLink").find("span").toggleClass("uico uicoGR"); 
+0

원래 질문에 해결해야 할 조건이 있습니다. – FiveTools

+0

FiveTools에 동의합니다.이 답변은 jQuery 사용 문제를 지적하지만 질문에는 대답하지 않습니다. – jfriend00

+0

나는 그 조건이 이미 원래의 코드에 의해 다루어졌으며, 무엇이 빠 졌는지를 지적했다. –

1

는 듀얼 클래스 메소드를 사용하여 주장하는 경우, 거스 여기에 정답이 있습니다,하지만 당신은 모든이 코드를 필요가 있는지 나는 도전 할 것이다 :이를 위해, 단지 addClass()removeClass() 사용. 이러한 클래스가 CSS에 사용되면 uicoGR 또는 uico를 추가/제거하지 않고 CSS 선택기의 두 상태를 식별 할 수있는 충분한 정보를 이미 갖고 있기 때문에이 javascript가 필요하지 않습니다.

첫 번째 상태 (당신을 위해 무엇을 .uicoGR를 사용하고 있던 것은)이 CSS 선택기입니다 :

#mylink.dis span {put your CSS here} 
:

#mylink span {put your CSS here} 

두 번째 상태는 (당신이 .uico 사용하고 무엇을)이 CSS 선택기입니다

"dis"클래스가있을 때 두 번째 상태는 첫 번째 상태의 CSS보다 우선합니다.