jQuery data()方法在循环中重置先前设置的数据

时间:2010-02-26 17:56:33

标签: jquery

好的,所以我试图在一堆匿名div中存储两个数据,这些div被附加到父div:

var $timepicker = $('<div class="timepicker"></div>');
var startTime = new Date(0, 0, 0, 0, 0, 0, 0);
var endTime = new Date(0, 0, 0, 23, 60 - settings.step, 0, 0);

for (var time = startTime; time <= endTime; time.setMinutes(time.getMinutes() + 30)) {
    $timepicker.append($('<div></div>').data('time', time));
}

然而,在运行for循环之后,对于每个div,数据的值('time')总是等于最后一次的值(而它应该等于它最初设置的时间,明显)。我已经搜索了互联网的线索,但似乎没有其他人遇到这个问题。到底是怎么回事?是因为我使用的是匿名div吗?非常感谢您的帮助。

谢谢,

丹尼尔

2 个答案:

答案 0 :(得分:1)

对于那些好奇的人来说,事实证明它没有用,因为JS在每个div中持有引用时间,而不是传递的值。这是因为JS只将简单类型作为值传递;对象作为引用传递。解决方法是在每次迭代时实例化一个新的Date对象:

var $timepicker = $('<div class="timepicker"></div>');
var startTime = new Date(0, 0, 0, 0, 0, 0, 0);
var endTime = new Date(0, 0, 0, 23, 60 - settings.step, 0, 0);

for (var time = startTime; time <= endTime; time.setMinutes(time.getMinutes() + 30)) {
    $timepicker.append($('<div></div>').data('time', new Date(0, 0, 0, time.getHours(), time.getMinutes(), 0, 0)
}

答案 1 :(得分:0)

使用appendToappend不返回jQuery对象

$('<div></div>').appendTo($timepicker).data('time', time));