HTML5数据,数组和.push - 奇怪的冲突

时间:2013-11-16 01:40:34

标签: javascript jquery arrays html5

所以我试图找出为什么当我将一个值推送到父对象时,带有子对象的原因。

HTML:

<div id="parent" class="things" data-tallest="[]">
  <div id="child1" class="things" data-tallest="[]">
    I'm a child
  </div>
  <div id="child2" class="things" data-tallest="[]">
    I'm another child
  </div>
</div>

JS:

somearray = ["child1", "child2"]
$(".things").data("tallest",[])
for (var i = 0; i < somearray.length; i++) {
  tocheck = somearray[i]
  newarray = $("#"+tocheck).parent().data("tallest")
  newarray.push(20);
  $(tocheck).parent().data("tallest",newarray)
}

console.log("Child 1 'tallest': "+$("#child1").data("tallest"));

看到这个小提琴(在控制台日志中注明了问题):

http://jsfiddle.net/cTY3H/3/

我应该发生什么是迭代数组并两次将“20”推到父对象$("#parent")的数据最高数组中。它应该导致[20,20]。相反,两个子对象都将值[20,20]推入其数组中。子对象永远不应该分配给它们。

编辑:澄清

任何猜测?

2 个答案:

答案 0 :(得分:3)

您的数组只有一个项目,更改:

somearray = ["child1, child2"]

为:

var somearray = ["child1", "child2"];

答案 1 :(得分:0)

原来问题出在上面javascript的第1行。根据@ jfriend00和@charlietfl,我试图用以下方法清除存储的值:

$(".things").data("tallest",[])

在获取相同数组的所有.things对象中生成了结果,因此对其中的任何更改都会更改它们。

jQuery data method pushes data to child objects

上查看更好的解释