【问题标题】:How do I force jQuery append to NOT automatically close a tag?如何强制 jQuery 追加不自动关闭标签?
【发布时间】:2012-10-08 13:39:18
【问题描述】:

我有一个包含大约 1000 个属性的 JavaScript 对象,我想创建一个包含这些条目的 <table>,在一行中有八个属性 <tr>

我正在使用 jQuery append();但是,它会自动附加一个结束 </tr> 标记。我想手动定义关闭</tr> 的位置。我该如何做到这一点?

对象:

var g2u = {};

g2u.a1 = "";
g2u.a2 = "";
g2u.a3 = "";
g2u.a4 = "";
g2u.a5 = "";
g2u.a5a = "";
g2u.a6 = "";
g2u.a6a = "";
g2u.a6b = "";
... etc...

<table>:

<table id="list" border="1">
</table>

<script>
var ctr = 0;
$("#list").append('<tr>');

for (var g in g2u) {
  $("#list").append('<td><span class="rom">'+g+'</span>\n');
  $("#list").append('<span class="eh">'+g2u[g]+'</span>\n');
  $("#list").append('<span class="rom">&nbsp;&nbsp;</span></td>\n');
  ctr++;
  if (ctr % 8 == 0) {
    $("#list").append('</tr><tr>\n');
  }
}

损坏的输出:

<tbody><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr></tbody>
<td><span class="rom">a1</span></td><span class="eh"></span><span class="rom">&nbsp;&nbsp;</span><td><span class="rom">a2</span></td><span class="eh"></span><span class="rom">&nbsp;&nbsp;</span><td><span class="rom">a3</span></td><span class="eh"></span><span class="rom">&nbsp;&nbsp;</span><td><span class="rom">a4</span></td><span class="eh"></span><span class="rom">&nbsp;&nbsp;</span><td><span class="rom">a5</span></td><span class="eh"></span><span class="rom">&nbsp;&nbsp;</span><td><span class="rom">a5a</span></td><span class="eh"></span><span class="rom">&nbsp;&nbsp;</span><td><span class="rom">a6</span></td><span class="eh"></span><span class="rom">&nbsp;&nbsp;</span><td><span class="rom">a6a</span></td><span class="eh"></span><span class="rom">&nbsp;&nbsp;</span><td><span class="rom">a6b</span></td><span class="eh"></span><span class="rom">&nbsp;&nbsp;</span><td><span class="rom">a7</span></td><span class="eh"></span><span class="rom">&nbsp;&nbsp;</span><td><span class="rom">a8</span></td><span class="eh"></span><span class="rom">&nbsp;&nbsp;</span><td><span class="rom">a9</span></td><span class="eh"></span><span class="rom">&nbsp;&nbsp;</span><td><span class="rom">a10</span></td><span class="eh"></span><span class="rom">&nbsp;&nbsp;</span><td><span class="rom">a11</span></td><span class="eh"></span><span class="rom">&nbsp;&nbsp;</span><td><span class="rom">a12</span></td><span class="eh"></span><span class="rom">&nbsp;&nbsp;</span><td><span class="rom">a13</span></td><span class="eh"></span><span class="rom">&nbsp;&nbsp;</span><td><span class="rom">a14</span></td><span class="eh"></span><span class="rom">&nbsp;&nbsp;</span><td><span class="rom">a14a</span></td><span class="eh"></span><span class="rom">&nbsp;&nbsp;</span><td><spa

【问题讨论】:

    标签: jquery html-table


    【解决方案1】:

    如果你追加它显然会尝试关闭标签。 尝试将您的 html 放在一个字符串中,而不是将该字符串附加到 dom。

        <script>
        var ctr = 0;
        var html='<tr>';
    
        for (var g in g2u) {
          html+='<td><span class="rom">'+g+'</span>\n';
          html+='<span class="eh">'+g2u[g]+'</span>\n';
          html+='<span class="rom">&nbsp;&nbsp;</span></td>\n';
          ctr++;
          if (ctr % 8 == 0) {
            html+='</tr><tr>\n';
          }
        }
    
    
         $("#list").append(html);
    

    【讨论】:

    • 简单漂亮
    【解决方案2】:

    你在考虑 html 标记,使用 append 你应该考虑 html DOM,你没有打开标签和关闭标签只是元素。

    您可以使用字符串来构建您的 html,然后将其附加到表格中

    var ctr = 0;
    var innerTable = '<tr>';
    
    for (var g in g2u) {
      innerTable += '<td><span class="rom">'+g+'</span>\n';
      innerTable += '<span class="eh">'+g2u[g]+'</span>\n';
      innerTable += '<span class="rom">&nbsp;&nbsp;</span></td>\n';
      ctr++;
      if (ctr % 8 == 0) {
        innerTable += '</tr><tr>\n';
      }
    }
    $("#list").append(innerTable);
    

    【讨论】:

      【解决方案3】:

      七年,但我坚信我可以帮助遇到类似问题的其他人。例如,如果你想使用 JQuery 的 $.each() 和 .append() 来制作用户列表,例如:

      <ul>
        <li>User 1</li>
        <li>User 2</li>
      </ul>
      

      这是你不想做的事情:

      element.append(`<ul>`);
      $.each(users, function(key, value) {
        element.append(`<li>${value.name}</li>`);
      });
      element.append(`</ul>`);
      

      输出将类似于:

      <ul></ul>
      <li>User 1</li>
      <li>User 2</li>
      

      相反,这是您想要做的:

      element.append(`<ul id="ul-users"></ul>`);
      $.each(users, function(key, value) {
        $("#ul-users").append(`<li>${value.name}</li>`);
      });
      

      所以输出如下:

      <ul id="ul-users">
        <li>User 1</li>
        <li>User 2</li>
      </ul>
      

      【讨论】:

      • 这很明显,但仍然很有帮助!
      猜你喜欢
      • 1970-01-01
      • 2019-05-16
      • 1970-01-01
      • 1970-01-01
      • 2016-01-22
      • 1970-01-01
      • 1970-01-01
      • 2019-02-02
      • 1970-01-01
      相关资源
      最近更新 更多