2013-10-02 19 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