0

$.each同じイベント ハンドラーを 2 つの異なる jQuery オブジェクトに適用できることはわかっています。次のようなよりクリーンな構文を使用することができなかったことに驚いています。

  var $span = $('span');
  var $div = $('div');

  var clickHandler = function () {
    $(this).toggleClass('red');
  }

  $($span, $div).on('click', clickHandler); // <-- Neater syntax
  $([$span, $div]).on('click', clickHandler); // <-- A little worse, but still better than $.each

試した構文が機能しないのはなぜですか? を使用するためのより適切な代替手段はあり$.eachますか?

4

4 に答える 4

2

複数のセレクタに CSS 構文を使用できます - コンマ,:

$('span, div').on('click', clickHandler);

または、要素を含む変数がある場合は、使用できますadd()

$span.add($div).on('click', clickHandler);
于 2013-01-08T11:21:14.430 に答える
2
$span.add($div).on('click', clickHandler)

add()docsに従って、必要なことを行う必要があります。

  1. $($span, $div)$spanはの子孫であるとして解釈されてい$divます。
  2. $([$span, $div])は、配列要素が jQuery オブジェクトではなく であることを期待してDOMElementsいます (これも可能であることを常に望んでいました)

これらの構文は両方とも、jQuery のドキュメントで説明されています。

于 2013-01-08T11:21:37.030 に答える
1

jQuery の.add()linkメソッドを使用して、ラップされたセットを拡張することもできます

$span.add( $div ).on( 'click', clickHandler );
于 2013-01-08T11:20:50.873 に答える
-2

上記の他の提案のように、ハンドラーではなくセレクターを理解することに問題があるようです。

$('span, div')
于 2013-01-08T11:33:05.097 に答える