使用JavaScript和jQuery从html元素创建对象

时间:2014-12-11 12:02:50

标签: javascript jquery html

我想使用JavaScript和jQuery从html元素创建一个对象。

我想要创建的对象是

{
  array:[{infraStructureType: 'value', hostId: 'value'}, {infraStructureType: 'value', hostId: 'value'}]
}

所以我创建上述对象的代码是

  var obj = {}, dataObj = {compareESX: []};
  $('.checkBox:checked').each(function () {
    obj.infraStructureType = $(event.target).attr('hostId');
    obj.hostId = $(event.target).attr('infrastructureType');
    console.log(obj);
    dataObj.compareESX.push(obj);
    console.log(dataObj);
  });

在上面的代码" console.log(obj)"给出正确的输出但是,当我把它推入数组" dataObj.compareESX" 只有最后一个' obj'的信息。每个循环执行的次数被推动。

3 个答案:

答案 0 :(得分:0)

JS使用Call by reference方法。因此,当更新obj时,它会更改所有值。你需要做深拷贝。使用这个

dataObj.compareESX.push(JSON.parse(JSON.stringify(obj)));

答案 1 :(得分:0)

试试这个:FIDDLE 我们需要再次定义obj以清除以前的值。

var dataObj = {compareESX: []};
  $('.checkBox:checked').each(function (e) {
    var obj = {};
    obj.infraStructureType = $(this).attr('hostId');
    obj.hostId = $(this).attr('infrastructureType');
    //console.log(obj);
    dataObj.compareESX.push(obj);
    //console.log(dataObj);
  });
console.log(dataObj);

答案 2 :(得分:-1)

您必须将对象定义var obj = {} 放在each循环中。现在,您正在为循环中的每个条目使用相同的对象。相反,您应该为循环的每个复选框创建一个新对象。

var dataObj = {compareESX: []};
$('.checkBox:checked').each(function () {
  var obj = {};
  obj.infraStructureType = $(event.target).attr('hostId');
  obj.hostId = $(event.target).attr('infrastructureType');
  console.log(obj);
  dataObj.compareESX.push(obj);
  console.log(dataObj);
});