我试图在jQuery中链接一个匿名函数,但它不起作用。我收到错误“错误:XML过滤器应用于非XML值...”。什么是正确的语法或者是否有一个我可以使用的效果函数,它不会在视觉上做任何事情并且包装我的函数?
我的例子:$item.appendTo($list).(function() {.....}());
答案 0 :(得分:7)
链接通过返回给定可链接函数的结果返回原始jQuery对象来工作。假设,为了链接你的匿名函数,你必须“返回”原始的jQuery对象。
但是,您的函数必须可以从jQuery对象的上下文中调用。例如,存在函数
$item.appendTo
但是,jQuery对象上没有可通过以下方式访问的函数:
$item.(function(){ })
这样想。我们假设您有以下对象:
var obj = { foo: function(){ console.log(1); } };
'foo'声明可以作为obj上的属性/声明来访问。但究竟是什么,是你用匿名函数引用的声明?
obj.(function(){ })
你可以给你的匿名函数一个jQuery对象的执行上下文的唯一方法就是对它进行“调用”
(function(){ }).call($item, args);
如果您想要将其链接起来,理论上您可以通过以下方式实现:
(function(){ return this; }).call($item, args).appendTo($other);
但我不确定你会得到什么。你最好的选择就是:
$item.appendTo($list);
(function($obj){ })($item);
或者,如果你开始使用选择器:
var $item = $('#someID').appendTo($list);
(function($obj){ })($item);
虽然,此时匿名函数不那么有用,所以我只想:
var someFunc = function($obj){ };
$item.appendTo($list);
someFunc($item);
答案 1 :(得分:5)
您可以使用.each
方法
$item.appendTo($list).each( function() {.....} );
或者,您可以使用自己的函数(jQuery.fn.extend()
)扩展jquery对象。
$.fn.extend({
myOwnFunc: function(){
/*do whatever*/
return this; // to allow for further chaining.
}
});
现在您可以致电$item.appendTo($list).myOwnFunc()
答案 2 :(得分:0)
不应该是:
$item.appendTo($list).(function() {.....})();
完全忘记提及返回$;