2

JQueryの一連のDIVにHTMLラジオボタンの動作を実装しようとしています。すべての要素から「set」クラスを削除してから、addClass()を使用して、クリックされた(1つの)要素を再設定します。

$(".button").each(function() {
  $(this).click(function(){
    // what goes here to call removeClass() on *all* the elements?
    $(this).addClass("set");
  });
});

すべての要素(この場合は$( "。button"))でremoveClass()を呼び出したいのですが、$( "。button")を明示的に参照することはできません。

これはより大きなプログラムの一部であり、each()ループ内の動作は他のパラメーターによって変更できるため、ループの外で$( "。button")。removeClass( "set")を呼び出すことはできません。

内部から要素の完全なセットにアクセスする方法、またはそれらを変数として渡す方法はありますか?または、問題に取り組む別の方法はありますか?

4

7 に答える 7

3

プラグインを作成しているので、新しいセレクター機能を探している可能性があります。

jQuery.fn.test = function() {
    console.log(this.selector); // .button
};

$('.button').test();
于 2009-05-22T19:19:15.007 に答える
2

内部関数でセレクターをハードコーディングできない場合、jQueryは実際に元の呼び出しでセレクターとして使用された文字列を返すことができます。$('。bla')。selectorを参照してください

ただし、これは新しいバージョンでのみ追加されています。

于 2009-05-22T19:06:18.263 に答える
0

これは不必要に複雑に思えます。最終的に達成しようとしていることをより明確に把握するのに役立つ場合があります。

ループ内では、jquery $( "div")//ループ内で好きなものをフェッチできます

于 2009-05-22T18:55:34.260 に答える
0

「しかし、$( "。button")を明示的に参照することはできません」とあなたは言います。何故ですか?

$(".button").each(function() {
  $(this).click(function(){
    $('.button').removeClass('set'); // this should do it
    $(this).addClass("set");
  });
});
于 2009-05-22T18:56:46.660 に答える
0

変更するだけです:

$(".button").each(function() {
  $(this).click(function(){
    $('.button').removeClass("set");
    $(this).addClass("set");
  });
});

なぜそれが問題になるのかわかりません。毎回.buttonを引くのが少し遅いですが、それがあなたが望むようにループに含まれる唯一の方法です。

于 2009-05-22T18:57:16.393 に答える
0

テキストの本文で尋ねられた質問に答えました。兄弟であるのすべての要素のクラスを設定する場合は、兄弟を使用します。

これはradioClass()の下のロードマップにあるので興味深い

必要なのは兄弟であり、クリックイベントを設定するためにそれぞれを使用しないでください。

$(".button").click(function() {
  $(this).addClass('set');
  $(this).siblings('.button').removeClass('set');
});

上記の動作については、次の例を参照してください。

http://jsbin.com/ewiqe

于 2009-05-22T18:57:39.140 に答える
0

内部関数から$('。button')を参照できない理由はまだわかりませんが、代わりに自由変数で参照をキャプチャできますか?

var buttons = $(".button");
buttons.each(function() {
  $(this).click(function(){
    // what goes here to call removeClass() on *all* the elements?
    buttons.removeClass('set');
    $(this).addClass("set");
  });
});
于 2009-05-22T19:31:45.560 に答える