我从来没有在我读过的任何jQuery文档中看到这个;我也没见过它。我刚刚在这里使用jQuery 1.4.2观察了after
修饰符的多内容语法。这是支持的语法吗?它被弃用了吗?
$(".section.warranty .warranty_checks :last").after(
$('<div class="little check" />').click( function () {
alert('hi')
} )
, $('<span>OEM</span>') /*Notice this (a second) argument */
);
以下是.after( content )
之后的签名。但是,正如我的示例所示,它应该是.after( content [, content...] )
我从未在jQuery语法中看到任何指示任何函数以这种方式接受多个参数(内容)。
更新:它做了什么?我把它留下来认为很明显:
它会在<div class="little check" />
上插入带有上述回调的.click()
,然后使用全新的同级元素<span>OEM</span>
进行跟进。
有关如何重写此内容的问题,请参阅this follow-up。
答案 0 :(得分:2)
是的,这个有效,虽然它在技术上不受支持,you can see a demo here。
如果你给.after()
多个参数,它会一次追加一个。
您可以在此处查看相关的jQuery核心代码:http://github.com/jquery/jquery/blob/master/src/manipulation.js#L141
它接受所有提供的参数并将它们推送到堆栈中以便插入...但由于这不是一个记录的功能,它可能会在以后的任何jQuery版本中发生变化(尽管它至少对于1.4.3来说似乎是安全的)
答案 1 :(得分:1)
根据docs不允许,但你在代码中看到它是可能的(你从实验中已经知道了什么;-))
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;
}
},
答案 2 :(得分:0)
编辑:我认为该参数已传递给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 );
};
如您所见,该函数仅使用一个参数。