2010-12-08 16 views
8

我想在jQuery中鏈接一個匿名函數,但它不工作。我收到錯誤「錯誤:XML過濾器應用於非XML值...」。什麼是正確的語法,或者是否有一個效果函數,我可以使用它不會在視覺上做任何事情,並且包裝我的函數?如何鏈接jQuery中的匿名函數?

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

+0

能不能細說,你要完成什麼?這對我來說毫無意義。你是否試圖調用一個函數使得`this`設置爲`$ item`? – meagar 2010-12-08 22:33:23

回答

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); 
+0

類似於:$ item.appendTo($ list)。(function($){/ * do your stuff */return $;})(jQuery); – rcravens 2010-12-08 22:35:12

0

它不應該是:

$item.appendTo($list).(function() {.....})(); 

完全忘了提回$;

5

可以使用.each方法

$item.appendTo($list).each(function() {.....}); 

另外,你可以用你自己的函數來擴展jquery對象(jQuery.fn.extend())。

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

,現在你可以調用$item.appendTo($list).myOwnFunc()