我试图在jQuery中链接一个匿名函数,但它不起作用.我收到错误"错误:XML过滤器应用于非XML值...".什么是正确的语法或是否有一个我可以使用的效果函数,它不会在视觉上做任何事情,包裹我的功能?
我的例子: $item.appendTo($list).(function() {.....}());
链接通过返回给定可链接函数的结果返回原始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)
你可以使用这个.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()