Javascript函数包装器失败了吗?

时间:2009-05-10 19:53:38

标签: javascript jquery

我希望为jQuery方法添加功能。

我有代码

$('li.s').appendTo('#target');

有多个元素匹配li.s,我可以看到使用Firebug正确抓取它。

append方法在没有我的包装器的情况下工作正常。但是,使用我的包装器(不应该改变函数的任何内容):

var oldAppend = $.fn.append;

$.fn.append = function(expr) {
    return oldAppend.call(this, expr);
};

返回正确的jQuery对象,但只有第一个li.s附加到#target,而不是全部。{1}}。为什么是这样?在oldAppend的电话中,我在哪里丢失了其他元素?

2 个答案:

答案 0 :(得分:0)

我没有深入研究jQuery代码来检查这个,但是大多数函数通常应该返回this.each(fn):

$.fn.append = function(expr) {
    return this.each(function() {
        oldAppend.call($(this), expr);
    });
};

您会注意到我必须将this包装在内部函数内的jQuery对象中,因为append方法希望将其作为上下文。我不确定,但你可能会发现你需要将外部引用包装到this

return $(this).each

答案 1 :(得分:0)

问题是你(我)注意通过append传递给appendTo的{​​em>所有参数。像这样使用applyarguments

var oldAppend = $.fn.append;

$.fn.append = function() {
    return oldAppend.apply(this, arguments);
};

(请注意,所有功能都有arguments,因此您需要var args = arguments在适当的范围内访问这些参数,例如在使用$.each时。)