【问题标题】:How to create table rows in for loop如何在for循环中创建表格行
【发布时间】:2017-03-14 10:41:33
【问题描述】:

我在 Javascript 中的 For 循环 有一点问题。这是我的代码:

$(document).ready(function() {
  $.getJSON("CAN_gen_1.json", function(json) {
    var tr;
    for (var i = 0; i < json.messages.length; i++) {
      tr = $('<tr/>');
      var details = json.messages[i];
      for (var j = 0; j <= details.signals.length; j++) {
        tr.append("<td>" + details.signals[j].start_bit + "</td>");
        tr.append("<td>" + details.signals[j].comment + "</td>");
        tr.append("<td>" + details.signals[j].bit_length + "</td>");
        tr.append("<td>" + details.signals[j].factor + "</td>");
        tr.append("<td>" + details.signals[j].offset + "</td>");
        tr.append("<td>" + details.signals[j].is_big_endian + "</td>");
        tr.append("<td>" + details.signals[j].is_signed + "</td>");
        tr.append("<td>" + details.signals[j].name + "</td>");
        $('#table_1').append(tr);
      }
    }
  });
});

我声明了一个表行 (tr)。每次循环我的 json 文件时我都会使用它。问题是我得到一个包含所有数据的单行。

我想删减该行以获得可读的表格。

查看快照:。

【问题讨论】:

  • 进行检查以了解原因。你想追加到一个 TBODY

标签: javascript tablerow


【解决方案1】:

发生这种情况是因为您只为每个表创建了一个 &lt;tr&gt;

在内循环中创建您的trs:

$(document).ready(function() {
  $.getJSON("CAN_gen_1.json", function(json) {
    var tr;
    for (var i = 0; i < json.messages.length; i++) {
      var details = json.messages[i];
      for (var j = 0; j <= details.signals.length; j++) {
        tr = $('<tr/>');
        tr.append("<td>" + details.signals[j].start_bit + "</td>");
        tr.append("<td>" + details.signals[j].comment + "</td>");
        tr.append("<td>" + details.signals[j].bit_length + "</td>");
        tr.append("<td>" + details.signals[j].factor + "</td>");
        tr.append("<td>" + details.signals[j].offset + "</td>");
        tr.append("<td>" + details.signals[j].is_big_endian + "</td>");
        tr.append("<td>" + details.signals[j].is_signed + "</td>");
        tr.append("<td>" + details.signals[j].name + "</td>");
        $('#table_1').append(tr);
      }
    }
  });
});

这段代码有点笨拙。我建议分解一个函数来创建行。这样一来,何时需要创建它们就很清楚了,您不必重复details.signals[j]

function tableRowForSignal(signal) {
  return $('<tr />')
   .append($("<td>").text(signal.start_bit));
   .append($("<td>").text(signal.comment));
   .append($("<td>").text(signal.bit_length));
   .append($("<td>").text(signal.factor));
   .append($("<td>").text(signal.offset));
   .append($("<td>").text(signal.is_big_endian));
   .append($("<td>").text(signal.is_signed));
   .append($("<td>").text(signal.name));
}

$(document).ready(function() {
  $.getJSON("CAN_gen_1.json", function(json) {
    var tr;
    for (var i = 0; i < json.messages.length; i++) {
      var details = json.messages[i];
      for (var j = 0; j <= details.signals.length; j++) {
        $('#table_1').append(tableRowForSignal(details.signals[j]));
      }
    }
  });
});

【讨论】:

  • @mplungjan 谢谢。只是忘了添加return语句。
【解决方案2】:

您需要为每一行

创建一个新行
  tr = $('<tr/>');
  var details = json.messages[i];
  for (var j = 0; j <= details.signals.length; j++) {
    tr.append("<td>" + details.signals[j].start_bit + "</td>");

这些行中的第一行需要循环中,您可以在其中创建进入其中的单元格。

【讨论】:

  • @mplungjan — 有两个循环。为一行创建所有单元格的是内部循环。引用代码中的第一行位于该内部循环之外。
【解决方案3】:
    $(document).ready(function() {
  $.getJSON("CAN_gen_1.json", function(json) {
    for (var i = 0; i < json.messages.length; i++) {
      var details = json.messages[i];
      for (var j = 0; j <= details.signals.length; j++) {
        var tr = $('<tr>');
        tr.append("<td>" + details.signals[j].start_bit + "</td>");
        tr.append("<td>" + details.signals[j].comment + "</td>");
        tr.append("<td>" + details.signals[j].bit_length + "</td>");
        tr.append("<td>" + details.signals[j].factor + "</td>");
        tr.append("<td>" + details.signals[j].offset + "</td>");
        tr.append("<td>" + details.signals[j].is_big_endian + "</td>");
        tr.append("<td>" + details.signals[j].is_signed + "</td>");
        tr.append("<td>" + details.signals[j].name + "</td>");
        tr.append("</tr>");
        $('#table_1').append(tr);
      }
    }
  });
});

【讨论】:

    【解决方案4】:

    你必须用

    打开 for 之前的行
    <tr>
    

    在所有的追加之后,你应该用

    关闭它
    </tr>
    

    【讨论】:

    • tr = $('');这样做
    • 问题是处理 jQuery/DOM,而不是 HTML。它适用于元素,而不是标签(尽管有抽象)。即使这是 HTML,tr 元素的结束标记也是可选的!
    猜你喜欢
    • 1970-01-01
    • 2015-12-12
    • 1970-01-01
    • 1970-01-01
    • 2016-01-22
    • 1970-01-01
    • 2019-01-31
    • 2022-01-09
    • 1970-01-01
    相关资源
    最近更新 更多