jquery bind click和 tag onclick之间的性能

我正在开发一个Web应用程序并使用相当多的JavaScript执行任务。 我有一些与Jquery绑定的标签点击做一些工作,所以我有这样的代码:

HTML代码:

some content here some content here .... 

Jquery代码:

  $('#id1').click(function(){ //do something here.. return false; }); $('#id2').click(function(){ //do something else here.. return false; }); 

使用这种方法,当脚本运行时,jquery必须查找选择器(id1,id2,ect)。

但还有另一种方法可以避免查找选择器,具体如下:

 some content here some content here 

和js代码:

  function f1(){ //do something here.. }); function f2(){ //do something else here.. }); 

考虑到性能,哪种方法更好? 感谢帮助。

真正的性能提升是通过仅使用附加到父元素的一个事件处理程序,并使用event.target捕获子元素生成的事件,因为事件在JavaScript中默认冒泡到最外面的父元素。

将您的链接包裹在div中

  

只附加一个事件监听器

 $('#parent').click(function(event){ // event.target is now the element who originated the event $(event.target).doSomething(); }); 

这是速度的大幅提升,特别是在IE等旧版浏览器中,以及当你开始有很多事件时。

在此查看示例

忘记表现 – 两者之间的任何差异都是无关紧要的。

第一种方法更好,因为它保持了行为和内容之间的严格分离。

顺便提一下,性能差异分配事件处理程序时产生 。 在这种情况下,内联调用不必“找到”dom元素,但是,由于你的jquery选择器是通过id选择的(这非常有效),额外步骤引起的“开销”将很小。

性能明智的内联调用很快,因为它是立即触发的,而如果你使用jquery,它会监听这个事件并找到所有附加的处理程序并按顺序执行它们。 但是使用jquery,您可以设法以系统的方式附加所需的处理程序。

一种可能性是使用.delegate(),您可以在其中设置特定于上下文的绑定。 由于委托的工作原理,这应该比.live()和几个.click()绑定更快。 这里有一个很好的写作, 这里有一个优秀的必读。 祝好运!

HTML

  

jQuery的/ JavaScript的

 $("#wrapper").delegate("#id1", "click", function(e){ e.preventDefault(); //do something here.. }); 

Jquery Delegate API

根据Jose Faeti的回答,这里有两个问题:

  • 我怎样才能直接回答他的回答? ;)
  • 我有以下场景: http : //jsfiddle.net/syY4D/

问题是,包含其他元素(如div或spans)的锚标签不会被视为已点击。 这是儿童元素。

 
hello

i don't need to be listened to
there
neither me, only a-tags should be concerned
only i am "really" listened to
more content

这可能很难看,但在我们现有的应用程序中,这是当前的状态。 所以我改编了相应的JavaScript如下:

 $('#foo').click( function ( event ) { event.preventDefault(); if( $(event.target).hasClass('clickable') ) { alert('clicked: ' + event.target.name ); } else { if( $(event.target).closest('a.clickable').length ) alert('has parent: ' + $(event.target).closest('a.clickable').attr('name') ); } }); 

我的问题:有没有更好的解决方案呢? 性能更高? 它难看还是你会做出不同的事情?

干杯