如何在jQuery中链接匿名函数?

时间:2010-12-08 22:28:32

标签: jquery

我试图在jQuery中链接一个匿名函数,但它不起作用。我收到错误“错误:XML过滤器应用于非XML值...”。什么是正确的语法或者是否有一个我可以使用的效果函数,它不会在视觉上做任何事情并且包装我的函数?

我的例子:$item.appendTo($list).(function() {.....}());

3 个答案:

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

完全忘记提及返回$;