2010-05-23 52 views
0

這是同樣的問題,因爲這: https://stackoverflow.com/questions/2890620/jquery-running-a-function-in-a-context-and-adding-to-a-variablejQuery的:編寫方法

但這個問題被提出很差。

再次嘗試,我試圖做這樣的事情:

我有一堆我想從,該數據是在的元素孩子的班級形式搶數據元素。

<div id='container'> 
    <span class='a'></span> 
    <span class='b'></span> 
    <span class='c'></span> 
</div> 
<div id='container2'> 
    <span class='1'></span> 
    <span class='2'></span> 
    <span class='3'></span> 
</div> 

我有這樣的方法:

jQuery.fn.grabData = function(expr) { 
    return this.each(function() { 
     var self = $(this);    
     self.find("span").each(function(){ 
      var info = $(this).attr('class'); 
      collection += info; 
     }); 
    }); 
}; 

我跑這樣的方法:

var collection = ''; 
$('#container').grabData(); 
$('#container2').grabData(); 

收集應增加彼此,這樣最終我得到這個

console.log(collection); 

abc123 

但是方法中的集合是未定義的。我該如何讓該方法知道它應該添加到哪個集合?

謝謝。

回答

2

如果你希望積累價值爲grabData函數的每一個電話,您將需要一個全局變量:如果在另一方面,你要只爲grabData功能的單電做

var collection = ''; 
jQuery.fn.grabData = function(expr) { 
    return this.each(function() { 
     var self = $(this);    
     self.find('span').each(function() { 
      var info = $(this).attr('class'); 
      collection += info; 
     }); 
    }); 
}; 

你可以這樣做:

jQuery.fn.grabData = function(expr) { 
    var collection = ''; 
    this.each(function() { 
     var self = $(this);    
     self.find('span').each(function() { 
      var info = $(this).attr('class'); 
      collection += info; 
     }); 
    }); 
    return collection; 
}; 

,然後用它是這樣的:

var collection = $('#container').grabData(); 
console.log(collection); 
+0

對於第一種類型,這與我的問題不一樣嗎?這使得錯誤收集沒有被定義。 – Mark 2010-05-23 08:13:44

+0

不完全一樣。把'var collection ='**'**放在'document.ready'函數的**之外。我想你的情況下,你把它放在裏面,因爲你正在使用插件。 – 2010-05-23 08:17:50

+0

啊哈,謝謝。 – Mark 2010-05-23 08:27:00