2

処理された要素のIDから計算する必要がある条件に基づいてクラスを切り替えたい:

$(".centre li").toggleClass("highlight", someFunction(x));

(これにより、約10個のリスト要素が選択されます。強調表示が必要かどうかを調べるには、各要素のIDが必要です。)

someFunction(selectedElement) {
  if (selectedElement.id in someArray)
    return true
  else
    return false
}

クロージャで道に迷ったかもしれません-地獄ですがthis、関数では別の要素に設定されています。これが実際のコードです。

...
showListItem = function(linkSelector, listSelectors, contentSelector) {
return function() {
    $(".centre li").toggleClass("backgroundFullOrange", test(this));
    function test(a) {
        console.log($(a).attr("id")); // -> id of the linkSelector-element
    }
}
};  
$(linkSelector).bind('click', showListItem(linkSelector, listSelectors, contentSelector))
...

更新:toggleClass()は私が探していた関数ではないことが判明しました。正しい使用法については、受け入れられた回答を参照してください。

4

1 に答える 1

4

まず、$(".centre li").toggleClass("highlight", someFunction(x));正しい構文ではありません。2 番目の引数はswitch次のとおりで、定義は次のとおりです。

switchクラスを追加または削除するかどうかを決定するブール値。

あなたが持っているようにスイッチを機能にすることはできません。

あなたの場合、呼び出してから.removeClass('highlight')addClass要素の ID を比較して、ハイライトまたは '' を返す必要があります。

1.5 秒ごとに 2 つの li をランダムにハイライトする DEMO を参照してください。

デモ

    $(".centre li")
       .removeClass('highlight')
       .addClass(function () {
           return ($.inArray(this.id, someArray) >= 0)?'highlight': '';
       });

今回は正しく理解できたと思います。下記参照、

デモ

$(function() {
    var someArray = ['l1', 'l8'];

    $(".centre li").toggleClass(function() {
        return ($.inArray(this.id, someArray) >= 0)?'highlight':'';
    });

});

を使ってみてください.filter。以下のようなもの、

$(".centre li").filter(function() {
    return $.inArray(this.id, someArray);
}).toggleClass("highlight");

ハイライトは、フィルターによって返された要素にのみ追加されます。

于 2012-04-06T18:03:45.817 に答える