我希望为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
的电话中,我在哪里丢失了其他元素?
答案 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>所有参数。像这样使用apply
和arguments
:
var oldAppend = $.fn.append;
$.fn.append = function() {
return oldAppend.apply(this, arguments);
};
(请注意,所有功能都有arguments
,因此您需要var args = arguments
在适当的范围内访问这些参数,例如在使用$.each
时。)