函数作为`.appendTo()的参数

时间:2011-10-18 13:51:58

标签: jquery

我想在函数确定的不同元素上使用.appendTo()。例如,我希望能够:

$myElement.appendTo(function () {
     if(Math.random() < 0.5) return $el1; else return $el2;
});

但是,jQuery文档没有涵盖作为.appendTo()的参数给出的函数的情况。

是否有一个特定的原因导致jQuery团队不允许这样的功能,并且有一个聪明的方法(可能通过重新定义.appendTo()功能)?许多其他jQuery函数允许函数作为参数......

5 个答案:

答案 0 :(得分:1)

一般情况下,您是否过滤/选择之前的元素?

答案 1 :(得分:1)

您应该向.appendTo提供功能结果(或its immediate invocation),而不是功能本身,例如:

$myElement.appendTo(
    (function() {
        if(Math.random() < 0.5) return $el1; else return $el2;
    })()
);

答案 2 :(得分:1)

filter方法需要一个函数。做这样的事情:

$("#someselector").filter(function () {
    return index == 1 || $(this).attr("id") == "fourth"; // or whatever
}).append($myElelment);

答案 3 :(得分:1)

有很多方法可以让你的代码工作:

  • 将自调用函数作为参数传递(这实际上意味着您传递函数的返回值)
  • 传递一个返回所需对象的条件语句
  • appendTo调用
  • 之前过滤元素

但是如果你真的想让jquery appendTo方法将函数作为参数,你应该自己扩展appendTo方法:

(function($){
    var originalAppendTo = $.fn.appendTo;
    $.fn.appendTo = function(f){
        el = typeof f === 'function'
            ?  f.call(this)
            :  f;
        return originalAppendTo.call(this,el);
    }
})(jQuery);

然后您可以将函数作为参数传递给appendTo

$myElement.appendTo(function () {
    if(Math.random() < 0.5) return $el1; else return $el2;
});

以下是一个有效的例子:

http://jsfiddle.net/gion_13/ZEnMQ/

答案 4 :(得分:0)

您可以使用$ .append将此代码改为:

function append($myElement) {
    if(Math.random() < 0.5) return $el1.append($myElement); else return $el2.append($myElemen);
}

我不确定为什么jquery不允许你想要的功能。