2011-02-26 22 views
3

我總是發現自己在代碼的許多區域都有多重選擇器,其中包含點擊事件。以這種方式完成是否有任何缺點。jQuery應該將具有類似事件的選擇器分組爲1個選擇器。

例如:

$('#id').live('click'....) 
$('div').live('click'....) 
$('.class p').live('click'..) 

或者是它更好地都在一個選擇相結合,如

$('#id, div, .class p').. 

有時候,我發現很難將所有的一個選擇,因爲我必須知道哪些項目被點擊。並非所有項目都有ID。一些有id的一些類,有些只是普通的html標籤。如果在一個選擇器中組合所有更好,我怎麼知道哪個項目被點擊。

回答

3

如果您在單擊事件期間需要的物品之間分化 - 因此,對於每一個點擊的元素應該區分的行爲,你應該每個元素綁定的事件。

如果這些元素可以組合在一起,因爲它們共享相同的行爲,實在是沒有理由不組選擇。

將單擊事件綁定到多個元素時,$(this)始終指向單擊的元素,如果需要,它允許您執行一些元素特定的例程。例如:

HTML:

<ul> 
    <li>Some item</li> 
    <li>Another one</li> 
    <li>And another one</li> 
</ul> 
<span>Wee</span> 

的JavaScript:

$(function() { 
    $('span, li').click(function() { 
     $(this).append($('<div>Child div added to clicked element</div>')); 
    }); 
}); 

實施例:

http://jsfiddle.net/ArondeParon/db8K3/

+0

這個''不一定是指在嵌套元素的情況下點擊的元素。一個例子可以在http://jsbin.com/ejure5/2/ – Sampson 2011-02-26 07:45:18

+0

找到,取決於你如何看待它。我們正在討論jQuery事件,並且元素上的綁定事件是觸發器,這意味着它被單擊。這個問題主要不是關於事件冒泡或事件授權。 – 2011-02-26 07:52:02

+0

正確。我想我有點太直接:)好的答案。 +1 – Sampson 2011-02-26 07:53:33

0

您可以使用

$(this).attr('id') 

找到單擊元素的ID。如果你通常做同樣的事情,可以使用一個選擇器,否則可能會更清晰地分離出來。

1

如果他們都具有相同的點擊邏輯,我會結合他們的選擇器來保持代碼冗長。如果您想告訴哪個項目被點擊,您可以通過訪問活動target property來完成。 target屬性具有比this引用更大的粒度。