jQuery的多参数内容语法的状态是什么:不推荐使用,支持,记录?
在我读过的任何jQuery文档中,我从未见过这个; 我也没见过它。 我刚刚观察到多内容语法在这里使用jQuery 1.4.2的after
修饰符。 这是支持的语法吗? 它被弃用了吗?
$(".section.warranty .warranty_checks :last").after( $('').click( function () { alert('hi') } ) , $('OEM') /*Notice this (a second) argument */ );
这是以下的签名: .after( content )
。 但是,正如我的例子所示,它应该是.after( content [, content...] )
我从未在jQuery语法中看到任何指示任何函数以这种方式接受多个参数(内容)。
更新 :它做了什么? 我把它留下来认为很明显:
它在.click()
上插入一个带有上述回调的
OEM
跟进。
有关如何重写此问题的问题,请参阅此后续内容。
是的,这是有效的 ,虽然它在技术上不受支持,但你可以在这里看到一个演示 。
如果你给.after()
多个参数,它会一次追加一个。
您可以在此处查看相关的jQuery核心代码: http : //github.com/jquery/jquery/blob/master/src/manipulation.js#L141
它接受所有提供的参数并将它们推送到堆栈中以便插入…但由于这不是一个记录的function,它可能会在任何未来的jQuery版本中发生变化(尽管它至少对于1.4.3来说似乎是安全的)。
根据文档不允许这样做,但你在代码中看到它是可能的(你从实验中已经知道了什么;-))
after: function() { if ( this[0] && this[0].parentNode ) { return this.domManip(arguments, false, function( elem ) { this.parentNode.insertBefore( elem, this.nextSibling ); }); } else if ( arguments.length ) { var set = this.pushStack( this, "after", arguments ); set.push.apply( set, jQuery(arguments[0]).toArray() ); return set; } },
编辑 :我认为参数传递给click
。
这个答案是正确但无关紧要的。
这些函数只接受一个参数。 任何其他参数都将被忽略(暂时)。
因此,将忽略示例中的第二个参数。
但是,如果jQuery为这些函数添加了一个可选参数(例如,添加实时处理程序的布尔值),那么您的示例将停止工作。
处理程序由jQuery(1.4.2)定义,如下所示:
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").split(" "), function( i, name ) { // Handle event binding jQuery.fn[ name ] = function( fn ) { return fn ? this.bind( name, fn ) : this.trigger( name ); }; if ( jQuery.attrFn ) { jQuery.attrFn[ name ] = true; } });
此代码循环遍历事件名称,并为每个事件创建以下函数:
jQuery.fn[ name ] = function( fn ) { return fn ? this.bind( name, fn ) : this.trigger( name ); };
如您所见,该函数仅使用一个参数。