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

Ton*_*ich 8 jquery

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

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

Mat*_*att 7

链接通过返回给定可链接函数的结果返回原始jQuery对象来工作.假设,要链接您的匿名函数,您必须"返回"原始jQuery对象.

但是,您的函数必须可以从jQuery对象的上下文中调用.例如,存在功能

$item.appendTo
Run Code Online (Sandbox Code Playgroud)

但是,jQuery对象上没有可通过以下方式访问的函数:

$item.(function(){ })
Run Code Online (Sandbox Code Playgroud)

想想这样.我们假设您有以下对象:

var obj = { foo: function(){ console.log(1); } };
Run Code Online (Sandbox Code Playgroud)

'foo'声明可作为obj上的属性/声明访问.但究竟,您使用匿名函数引用的声明是什么?

obj.(function(){ })
Run Code Online (Sandbox Code Playgroud)

您可以为匿名函数提供jQuery对象的执行上下文的唯一方法是对其执行"调用"

(function(){ }).call($item, args);
Run Code Online (Sandbox Code Playgroud)

如果你想要链接这个,你理论上可以这样做:

(function(){ return this; }).call($item, args).appendTo($other);
Run Code Online (Sandbox Code Playgroud)

但我不确定你会得到什么.你最好的选择就是:

$item.appendTo($list);
(function($obj){ })($item);
Run Code Online (Sandbox Code Playgroud)

或者,如果您从选择器开始:

var $item = $('#someID').appendTo($list);
(function($obj){ })($item);
Run Code Online (Sandbox Code Playgroud)

虽然,此时匿名函数不那么有用,所以我只想:

var someFunc = function($obj){ };
$item.appendTo($list);
someFunc($item);
Run Code Online (Sandbox Code Playgroud)


Gab*_*oli 5

你可以使用这个.each方法

$item.appendTo($list).each( function() {.....} );
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用自己的函数(jQuery.fn.extend())扩展jquery对象.

$.fn.extend({
    myOwnFunc: function(){
         /*do whatever*/
         return this; // to allow for further chaining.
    }
});
Run Code Online (Sandbox Code Playgroud)

现在你可以打电话了 $item.appendTo($list).myOwnFunc()