【问题标题】:If statement inside a loop filling a table jQuery填充表格jQuery的循环内的if语句
【发布时间】:2014-02-25 19:12:31
【问题描述】:

我正在使用 jQuery 填写时间表信息,该信息以 JSON 格式提供。这是我正在使用的循环:

for (var i = 0; i < r.events.length; i++) {
  myvar = r.events[i].slot;
  $("#" + myvar).text( r.desc + r.events[i].type + r.events[i].rooms +
                       r.events[i].id + r.events[i].duration );

所以我需要在循环中插入一个if 语句,如果事件的持续时间等于 2,则循环填充单元格 AND 单元格 +1。 (单元格被命名为:wed09wed10wed11wed12wed13wed14wed15wed16thu09thu10 等等。)

我将如何编码?

非常感谢

【问题讨论】:

  • 你能给我们一个快速的 jsfiddle.net 起点吗?为 r 存根数据。
  • jsfiddle.net: jsfiddle.net/V4sn8
  • 快速提问。所以,如果让我们说在 wed16,我们会得到一个事件持续时间为 2。会发生什么?是创建了一个新的 TD,还是因为它没有超过“16”,所以它没有得到 +1 处理?
  • 您好,不能超过 16 个。活动将在最多 16 个结束。抱歉,这花了这么长时间,如果我还能得到您的帮助,我将不胜感激 :)
  • cell+1 是什么意思?因为r.events 已经有了它需要填充的单元格的名称,所以您不需要对单元格进行迭代...

标签: javascript jquery loops if-statement


【解决方案1】:

我认为最好有这样的 TimeTable 类:

var TimeTable = function(currentCell) {
    var days = ["mon", "tue", "wed", "thu", "fri"];
    var hours = ["09", "10", "11", "12", "13", "14", "15", "16"];
    var currentDay = days.indexOf(currentCell.substring(0,3));
    var currentHour = hours.indexOf(currentCell.substring(3));
    // nextCell: updates the values on the TimeTable object
    var nextCell = function () {
        var lastDay = days.length - 1;
        if (currentHour === hours.length - 1) {
            currentHour = 0;
            currentDay++;
        } else {
            currentHour++;
        }
    }
    // getNextCell: gets the current Cell and increments the next cell
    getNextCell = function () {
        var currentCell = days[currentDay] + hours[currentHour];
        nextCell();
        return currentCell;
    }
    // fill: fills (duration) times the adjacent cells
    // input duration: the duration of the event ( > 0 )
    // input text: the text that needs to be filled into each cell 
    this.fill = function (duration, text) {
        for (var i = 0; i < duration; i++) {
            $("#" + getNextCell()).text(text);
        }
    }
}

由于您谈到了可能为 2 或更高的持续时间,因此我在 fill 方法中使用了 for 循环而不是 if,因此如果持续时间 = 3 等,它将填充 3 个单元格。

最后,您需要像这样替换 for 循环:

        for (var i = 0; i < r.events.length; i++) {
            var timeTable = new TimeTable(r.events[i].slot);
            text = r.desc + '\n' + r.events[i].type + '\n' + r.events[i].rooms + '\n' + r.events[i].id + r.events[i].duration;
            timeTable.fill(r.events[i].duration, text);
        }

代码在this fiddle

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-24
    • 1970-01-01
    • 2021-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-15
    • 1970-01-01
    相关资源
    最近更新 更多