2011-09-27 57 views
2
anArray = ['thing1','thing2','thing3']; 
$.each(anArray, function (i,el) { 
    var object = 'name.space.' + el; 
    var selector = 'node-' + el; 
    var object = $('#' + selector);//need object here to be interpreted as it's value 
     //as if: var name.space.thing1 = $('#' + selector); 
}); 

使得這些是可用的jQuery對象:如何從數組中創建jQuery對象?

console.log(name.space.thing1); 
console.log(name.space.thing2); 
console.log(name.space.thing3); 

我感覺的eval()參與。我正在爲導航選擇器提供水合功能,因此在添加/刪除頁面時,我們只需更新數組。我們可以建立從導航節點陣列,但無論哪種方式,我們仍然需要能夠使這些命名空間的選擇...

+0

你試圖完成什麼?一定有更好的方法。 –

+0

數字在javascript變量名稱的開頭無效。所以你的格式不會工作。 –

+0

我想在dom中導航節點的緩存jQuery對象。建議將這些對象創建爲綁定到遍歷數組或遍歷導航節點本身。 – folktrash

回答

4

你將不得不使用括號標記:

var array = ['thing1', 'thing2']; 
var object = {}; 
object.space = {}; 
$.each(array, function() { 
    object.space[this] = $('#node-' + this); 
}); 

console.log(object.space.thing1); // [<div id="node-1">]; 
+0

感覺像這樣,bazmegakapa [給]的答案是一樣的。我無法選擇答案。我該選擇哪一個?讓人們投票更多? – folktrash

+0

隨意爲任何一個投票,我想這是習慣選擇最古老的答案。但沒關係,兩者都投票。馬克一個回答。世界在繼續:) – Joe

+0

是的,不用擔心任何一種方式我猜:)。 – kapa

2

我不是當然你想完成什麼,但

name.space[el] = $('#' + selector); 

可能工作。

對象屬性總是可以用括號表示法來訪問。這意味着obj.xyobj['xy']一樣,但後者更加靈活,可用於像您這樣的情況。

+0

這似乎工作。儘管如此,我還不清楚name.space [el]後來可以作爲name.space.thing1引用。那是哪裏。來自(哪裏?那是[]的一部分嗎? – folktrash

+1

@folktrash - 'name.space [「thing1」]'相當於JavaScript中的'name.space.thing1'。因爲'el ===「thing1」'那麼'name.space [el] === name.space [「thing1」] === name.space.thing1'。 – gilly3

+0

Gotcha。感謝gilly3。 – folktrash

0
var anArray = ['thing1','thing2','thing3']; 
var name = {space:new Array()}; 

$.each(anArray, function (i,el) { 
    var selector = 'node-' + el; 
    name.space[el] = $('#' + selector); 
});