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 ); }; 

如您所见,该函数仅使用一个参数。