2011-06-10 52 views
0

我正在尋找一個更好的方式來做到這一點:如何用jQuery.data遞歸地擴展數據?

var extended = $.extend(entity.data('namespace'), { 
    att1 : whatever, 
    att2 : whatever 
}); 
entity.data('namespace', extended); 

有什麼建議?

+0

這是什麼遞歸? – Amadan 2011-06-10 21:37:41

+0

我使用jQuery.extend()文檔中的術語(請參閱http://api.jquery.com/jQuery.extend/)。這裏的「遞歸」是指擴展嵌套對象(本例中的最高級別對象是'{namespace:{att1:val,att2:val}}')。 – jkjenner 2011-06-10 21:39:25

+1

如果extend的第一個參數是「true」,'extend'就只是遞歸的,而在你的代碼片段中情況並非如此,這反過來使你的問題變得相當混亂...... – Amadan 2011-06-10 21:45:14

回答

2

.data()不知道如何擴展。如果你想擴展,你必須用jquery的.extend()方法自己做。遞歸擴展可以通過將true作爲第一個參數來實現,所以:

entity.data('namespace', $.extend(true, entity.data('namespace'), { ... })); 
+0

這的確如此,jquery文檔在這一點上令人困惑,因爲它讀取'在jQuery 1.4.3中用.data設置元素的數據對象(obj)擴展了先前存儲的元素。 – chrishiestand 2012-11-23 22:14:53

+0

jQuery的擴展將修改第一個對象,所以你可以只做$ .extend(true,$(el).data('namespace'),{new:'stuff })。@chrishiestand,我同意文檔很混亂,我認爲這意味着額外的數據鍵被擴展,允許你設置$(el).data('a',1),然後$(el).data(' b',2)不刪除a。 – Synexis 2013-05-02 04:36:17