jQuery在.trigger()和.click()中的优势/差异
在性能方面,以下两者之间的收益(或差异)是什么?
$('.myEl').click();
和
$('.myEl').trigger('click');
有没有呢?
这是click
方法的代码 :
jQuery.fn.click = function (data, fn) { if (fn == null) { fn = data; data = null; } return arguments.length > 0 ? this.on("click", null, data, fn) : this.trigger("click"); }
如你看到的; 如果没有parameter passing给函数,它将触发点击事件。
使用.trigger("click")
将会调用一个较less的函数。
正如@Sandeep在他的回答中指出的那样, .trigger("click")
更快:
从1.9.0开始, data
和fn
的检查已经移到.on
函数中 :
$.fn.click = function (data, fn) { return arguments.length > 0 ? this.on("click", null, data, fn) : this.trigger("click"); }
性能types.check这里.. http://jsperf.com/trigger-vs-not-trigger两者几乎相同;… click()是触发器('click')的简写。
我觉得
$('.myEl').trigger('click');
更好,因为它为您节省了一个函数调用$('.myEl').click();
只是称之为function。 看看jQuery源代码
jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " + "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + "change select submit keydown keypress keyup error contextmenu").split(" "), function( i, name ) { // Handle event binding jQuery.fn[ name ] = function( data, fn ) { if ( fn == null ) { fn = data; data = null; } return arguments.length > 0 ? this.on( name, null, data, fn ) : //here they call trigger('click'); if you provide no arguments this.trigger( name ); }; if ( jQuery.attrFn ) { jQuery.attrFn[ name ] = true; } if ( rkeyEvent.test( name ) ) { jQuery.event.fixHooks[ name ] = jQuery.event.keyHooks; } if ( rmouseEvent.test( name ) ) { jQuery.event.fixHooks[ name ] = jQuery.event.mouseHooks; } });