2013-02-06 34 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

相关问题