2010-05-31 15 views
2

我有这样一个页面:jquery.append() - 只有我名单的最后一个元素被添加,以前的被删除

<div id="daysTable"> 
    <div id="day0" class="day"></div> 
    <div id="day1" class="day"></div> 
    <div id="day2" class="day"></div> 
    <div id="day3" class="day"></div> 
    <div id="day4" class="day"></div> 
    <div id="day5" class="day"></div> 
    <div id="day6" class="day"></div> 
</div> 

和一些JavaScript来填补我的日历这样

function getWeek(){ 
    $.getJSON("/getWeek",function(events){ 
     var eventHeight = $("#hoursTable > div").height(); 
     var eventWidth = $("#daysTable > div").width(); 
     var startWeek = events[0]// timestamp of the start of the week 
     for(var i = 1; i < events.length; i ++){ 
      $(".day").empty(); 
      var startHour = (events[i].startDate - startWeek)/3600 
      var duration = (events[i].stopDate - startWeek)/3600 - startHour 
      var dayStart = Math.floor(startHour/24); 
      var startHour = startHour - dayStart * 24 
      divEvent = $('<div id="event'+events[i].idEvent+'"/>') 
       .width(eventWidth-2) 
       .height(duration*eventHeight) 
       .css("border","1px solid black") 
       .css("margin-top",startHour*eventHeight) 
       .html(events[i].name); 
      divEvent.appendTo("#day"+dayStart); 
      console.log(divEvent); 
     } 
    }); 
} 

我的问题是:事件包含3个元素,我想显示但只显示最后一个。 如果我在第一次迭代时停止了我的“for”,我可以看到第一个div被追加了,但是似乎如果我的循环进行了三次迭代,则前两个被删除。 console.log()显示一些“不再是”现有的元素。 有什么想法?

+0

欢迎来到SO ..干杯! – Reigel 2010-05-31 01:18:44

+2

您可能希望避免直接在JavaScript中设置边框和边距等样式,因为如果设计发生更改,这些样式可能会更改。相反,使用addClass()向您的元素添加类,然后让外部CSS文件指定日历的外观。 – Soviut 2010-05-31 01:37:53

回答

1

里面的循环你打电话$(".day").empty();其擦除以前的迭代任何添加...你需要,因此不会再这样做了以移动外面/在for循环之前。

所以这个:

for(var i = 1; i < events.length; i ++){ 
     $(".day").empty(); 

应该是这样的:

$(".day").empty(); 
    for(var i = 1; i < events.length; i ++){ 
+0

该死的,以为它花了我一天的一半-_-' 谢谢你们,我现在应该暂停一下 – jaes 2010-05-31 01:30:18

0

我们可以看到您的"/getWeek" JSON的返回的结构....

,因为我认为这个问题是,在function(events){...}events不是数组...

我想你应该有一些像events.data.length,然后events.data[i].somevariable

3

通过在循环的顶部调用$(".day").empty();,你删除所有的事件添加的每个新的人之前。

您需要在for循环前移动该行。

相关问题