2

如何将对象推送到data()作为数组的 jquery 对象中。我想最终得到numbers包含对象数组的 data 属性,我通过循环访问特定类的一些 html 来获取这些对象。我不明白如何将每个对象推入数组。

我的第一个问题是,如果我在一个对象中有一些数据,我如何查看整个对象。好像以前我能做到

$('#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

4

1 回答 1

4

JavaScript 没有关联数组,因此您必须使用 Object。然后对属性(键)名称使用括号表示法:

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') );
});

垃圾桶

在初始化数组并将其存储在元素.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') );

垃圾桶

于 2013-02-06T16:41:54.213 回答