2013-01-08 83 views
0

我知道我可以使用$.each將相同的事件處理程序應用於兩個不同的jQuery對象。我很驚訝這是不可能有一個更清晰的語法,如:對多個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有沒有更好的選擇?

回答

2
$span.add($div).on('click', clickHandler) 

應該按照add() docs做你想做的。

  1. $($span, $div)被解釋爲$span的它們的$div後代。
  2. $([$span, $div])預計數組元素是DOMElements,沒有jQuery的對象(我一直希望這是可能的)

可以看到無論是在jQuery documentation

1

您還可以使用jQuery的.add()link方法延長包裹設置

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

您可以使用CSS語法多重選擇 - 逗號,

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

或者,如果你有變數含有元素,您可以使用add()

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

描述這些syntaxs似乎我有一個理解選擇器而不是處理器的問題,就像上面提到的其他人一樣:use;

$('span, div') 
相關問題