2011-09-11 13 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

スペースで区切られた、最初のパラメータに渡されるべきでトグルされる2つのクラス名は。

また、hasClass()という条件をセレクタに追加することもできます。

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

編集

再質問を読むと、それはあなたがtoggleClass()が何を感謝していることは明らかではありません。この関数は、指定されたすべてのクラスを探し、見つからない場合は追加するか、そうでない場合はクラスを削除します。あなたがしているのは、3番目のクラスが見つかったかどうかに基づいてクラスを追加または削除するように見えるでしょう。このために、ちょうどaddClass()removeClass()を使用する:あなたはデュアルクラスメソッドを使用して主張する場合

$('#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

、その後のGusはここに正しい答えを持っていますが、私はあなたがすべてで、このコードが必要かどうかを挑戦します。これらのクラスがCSSに使用されている場合は、uicoGRまたはuicoを追加/削除せずにCSSセレクタの2つの状態を識別するための十分な情報がすでにあるため、このjavascriptは必要ありません。

最初の状態は(あなたが.uicoGRを使用していたもの)は、このCSSセレクタです:

#mylink span {put your CSS here} 

第二の状態は、(あなたが.uico使用していたもの)は、このCSSセレクタです:

#mylink.dis span {put your CSS here} 

クラス "dis"が存在する場合、2番目の状態は最初の状態のCSSを上書きします。

関連する問題