2013-02-06 55 views
2

我怎樣才能將一個對象推入jquery data()對象是一個數組。我想結束包含一個對象數組的數據屬性numbers,我通過循環訪問某個特定類的某個html來獲取它。我不明白我如何將每個對象推入數組。迭代通過jQuery數據()對象並將它們推送到另一個數據()對象(數組)

我的第一個問題是,如果我在對象中有一些數據,我該如何看待整個對象。看起來這曾經是我可以做

$('#div1').data('values', {'one' : 'UNO', 'two' : 'DUE'}); console.log($('#div1').data('values'))

Chrome就會給我一點點擴展的對象來看待。現在我只看到[object Object]我仍然可以看到他們,如果我做

console.log($('#div1').data('values').one)

但是,如果我不確切知道data()對象中的內容,這似乎更不方便。檢查看看我有多接近實現這一點很有用。

一旦我給你我所有的數據,以各自的對象,

$(document).ready(function(){ 
    $('#div1').data('values', {'one' : 'UNO', 'two' : 'DUE'}); 
    $('#div2').data('values', {'three' : 'TRE', 'four' : 'QUATTRO'}); 
    $('#div3').data('values', {'five' : 'CINQUE', 'six' : 'SEI'}); 
    $('#div4').data('values', {'seven' : 'SETTE', 'eight' : 'OTTO'}); 
}); 

我怎麼能遍歷這些對象(所有與共享add類),並把它們在data.values包含的對象到另一個data()對象?在這裏,我試圖做到這一點的body的數據對象,numbers

`$('body').data('numbers', []);` 

使

$('body').data('numbers') = 

['div1': { 
    'one': 'UNO', 
    'two': 'DUE' 
}, 
'div2': { 
    'three': 'TRE', 
    'four': 'QUATTRO' 
}, 
'div3': { 
    'five': 'CINQUE', 
    'six': 'SEI' 
}, 
'div4': { 
    'seven': 'SETTE', 
    'eight': 'OTTO' 
}] 

我的嘗試已經失敗:

$('.add').each(function (index, element) { 
     $('body').data(numbers, { 
      element.attr('id'): element.data('values') 
     //could not understand how to use push here, though it seems likely that's the answer 
    }); 

jsbin

+1

Javascript並沒有字面意義上的「關聯數組」。你希望你的最終結果是A.一個無序的名稱/值對集合(對象)或B.一個有序的值列表(數組)? –

+0

@AaronKurtzhals你是對的。我不知道爲什麼我將它設置爲一個數組。一個對象是我所追求的。謝謝。 – 1252748

回答

4

JavaScript沒有關聯數組,所以你必須使用一個Object。然後使用bracket notation的屬性(鍵)名稱:

var values = {}; 
$('.add').each(function (index, element) { 
    values[element.id] = $(element).data('values'); 
}); 
$('body').data('numbers', values); 

jsBin

關於您的[object Object],你可能會不小心做字符串連接與對象將其輸出到控制檯之前,否則它是在一個錯誤您的Chrome控制檯。

使用可以使用.push推項到陣列的端部的數組:

var values = []; 
$('.add').each(function (index, element) { 
    values.push($(element).data('values')); 
}); 

Bin

具有該陣列初始化並存儲在內部的元件的.data()後,可以以後推項通過簡單地抓取對Array對象的引用並調用其上的.push()

var values = []; 
$('.add').each(function (index, element) { 
    values.push($(element).data('values')); 
}); 
$('body').data('numbers', values); 

$('body').data('numbers').push({'nueve': 'nine'}); 
//logs "nueve" too as Array/Objects/Functions are passed by reference and the 
//previous command pushed an item into the Array object referenced ("stored") 
//in the $('body').data('numbers') 
console.log($('body').data('numbers')); 

Bin

+0

謝謝!爲什麼你需要用jquery wrapper來包圍'element'? – 1252748

+0

由於['.each'](http://api.jquery.com/each/)的第二個參數返回了[DOM元素](https://developer.mozilla.org/en-US/docs/DOM /元素)引用,它沒有'.data()'方法。 '=]'所以你必須把它包裝在一個jQuery對象中,以調用['.data()'](http://api.jquery.com/data/)方法。 –

+0

我很好奇,如果有可能做一個數組。我不一定需要名爲div1,div2,div3的對象。並且會在數組中做這件事讓我可以簡單地將一個新對象推到最後? – 1252748

相關問題