2013-10-02 22 views
3

東西看起來錯(低效):jQuery的簡化選型onclick事件

$($('.feature-s').siblings()).children().children('a[data-target=#deleteModal]').parent().parent().click(); 

我要選擇的範圍,其中:

/html/body/div/div/div/div[1][class="feature-s"] 
/html/body/div/div/div/div[2]/span/a/i/span <= click 

但不是其中:

/html/body/div/div/div/div[1][class="something else"] 
/html/body/div/div/div/div[2]/span/a/i/span <= not handled 

我重新創建了這裏的情況:

http://jsfiddle.net/brianray/ncu6u/

如果我的選擇器很好,就這麼說吧。我只是覺得必須有更好的方法來選擇基於現有的dom的按鈕。

謝謝!

回答

2

最簡單和最快的(出所有其他的答案)是:

$('.feature-s + div a[data-target="#deleteModal"]') 

jsperf

enter image description here

0

我覺得

$('.feature-s').siblings() 

已經返回了jQuery對象,所以你不必把它包裝到$()。

總的來說看起來不錯。希望這可以幫助。

+0

我認爲它有點長單班輪,但它應該比任何我能想到的更快..... –

1

檢查下面的jsFiddle。您可以使用+選擇器直接選擇在feature-s之後直接出現的元素。

$('.feature-s + div').find('a[data-target="#deleteModal"]').click(function(){ 
    alert('hey'); 
    return false; 
}); 

下面的示例工作得很好,效率更高。

http://jsfiddle.net/ncu6u/1/

+0

不管你信不信,這實際上是6%慢!看起來更好,儘管http://jsperf.com/selector-performance-test-mt – mattytommo

+0

應該提到,更有效的代碼明智,而不是性能明智。當涉及到性能時,.find()是個笨蛋! – Chris

+0

@mattytommo 6%在啓動但誰在乎,因爲它發生在後臺? – brianray