jQuery的多参数内容语法的状态是什么:不推荐使用,支持,记录?

时间:2010-05-28 21:09:22

标签: jquery

我从来没有在我读过的任何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

3 个答案:

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

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