【问题标题】:jQuery 3.3.1 - row is not added to tbody of a table using append()jQuery 3.3.1 - 行未使用 append() 添加到表的 tbody
【发布时间】:2019-12-11 01:14:30
【问题描述】:

我正在尝试使用 JQuery 3.3.1 和 Bootstrap 4 在单击事件时向 html 上的表动态添加一行。

HTML:

<table id='tblAddedCallsign' class='table table-striped'>
</table>

JAVASCRIPT:

var row =   '<tr>' +
                '<td class="text-right">' + callsign_id + '</td>' +
                '<td class="text-right">' + callsign_name + '</td>' +
                '<td class="text-right"><input type="button" class="btn btn-primary delete" value="Delete" data-id="' + callsign_id + '"></td>' +
                    '</tr>';

$('#tblAddedCallsign').append(row);

当点击事件发生时,html呈现如下:

<table id="tblAddedCallsign" class="table table-striped">
    <tr>
        <td class="text-right">360</td>
        <td class="text-right">BIRDDOG 386</td>
        <td class="text-right"><input type="button" class="btn btn-primary delete" value="Delete" data-id="360"></td>
    </tr>
    <tr>
        <td class="text-right">607</td>
        <td class="text-right">BIRDDOG 376</td>
        <td class="text-right"><input type="button" class="btn btn-primary delete" value="Delete" data-id="607"></td>
    </tr>
</table>

我实际上期待它是:

<table id="tblAddedCallsign" class="table table-striped">
  <tbody>
    <tr>
        <td class="text-right">360</td>
        <td class="text-right">BIRDDOG 386</td>
        <td class="text-right"><input type="button" class="btn btn-primary delete" value="Delete" data-id="360"></td>
    </tr>
    <tr>
        <td class="text-right">607</td>
        <td class="text-right">BIRDDOG 376</td>
        <td class="text-right"><input type="button" class="btn btn-primary delete" value="Delete" data-id="607"></td>
    </tr>
  </tbody>
</table>

所以问题是tbody在点击事件时没有自动添加到表格元素中,因此没有应用Bootstrap表格样式。

【问题讨论】:

  • 首先将&lt;tbody&gt;添加到字符串并在each的末尾关闭它

标签: javascript jquery bootstrap-4 jquery-3


【解决方案1】:

那你需要把&lt;tbody&gt;放到html里

有两种方法

  1. 在您附加的动态 html 中添加 &lt;tbody&gt;
  2. 将&lt;tbody&gt; 提供给您的表格并在该正文中追加行

var callsign_id = 1;
var callsign_name = 'name';
var row =   ' <tbody><tr>' +
                '<td class="text-right">' + callsign_id + '</td>' +
                '<td class="text-right">' + callsign_name + '</td>' +
                '<td class="text-right"><input type="button" class="btn btn-primary delete" value="Delete" data-id="' + callsign_id + '"></td>' +
                    '</tr> </tbody>';

$('#tblAddedCallsign').append(row);



// Another way
var row =   ' <tr>' +
                '<td class="text-right">' + callsign_id + '</td>' +
                '<td class="text-right">' + callsign_name + '</td>' +
                '<td class="text-right"><input type="button" class="btn btn-primary delete" value="Delete" data-id="' + callsign_id + '"></td>' +
                    '</tr> ';
$('#addRow').append(row);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table id='tblAddedCallsign' class='table table-striped'>
</table>

// Another way
<table id='tblAddedCallsign1' class='table table-striped'>
<tbody id="addRow">
</tbody>
</table>

【讨论】:

    【解决方案2】:

    我认为你找到了 tbody,然后附加你的行元素。

    $('#tblAddedCallsign tbody').append(row);
    

    【讨论】:

      【解决方案3】:

      将tbody 添加到您的 HTML 中,该行将插入其中。

      附加到

      • $('#tblAddedCallsign')
      • $('#tblAddedCallsign tbody')
      • $('#tblAddedCallsign &gt; tbody')

      应该都可以正常工作(第 2 和第 3 之间的区别在于后者只选择表元素的直接tbody 子元素)。

      callsign_id = 1;
      callsign_name = "name";
      var row =   '<tr>' +
                      '<td class="text-right">' + callsign_id + '</td>' +
                      '<td class="text-right">' + callsign_name + '</td>' +
                      '<td class="text-right"><input type="button" class="btn btn-primary delete" value="Delete" data-id="' + callsign_id + '"></td>' +
                          '</tr>';
      
      $('#tblAddedCallsign').append(row);
      $('#tblAddedCallsign tbody').append(row);
      $('#tblAddedCallsign > tbody').append(row);
      <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
      <table id='tblAddedCallsign' class='table table-striped'>
          <tbody></tbody>
      </table>

      【讨论】:

        【解决方案4】:

        只需在表格中指定tbody:

        <table id='tblAddedCallsign' class='table table-striped'>
          <tbody></tbody>
        </table>
        

        我也更喜欢Template Literals 来构建更简洁的htmlString。

        演示:

        var callsign_id = '01X';
        var callsign_name = 'John';
        var row = `<tr>
                  <td class="text-right">${callsign_id}</td>
                  <td class="text-right">${callsign_name}</td>
                  <td class="text-right"><input type="button" class="btn btn-primary delete" value="Delete" data-id=${ callsign_id}></td>
                  </tr>`;
        
        $('#tblAddedCallsign').append(row);
        tbody{
          color: red;
        }
        <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
        <table id='tblAddedCallsign' class='table table-striped'>
          <tbody></tbody>
        </table>

        【讨论】:

          猜你喜欢
          • 2012-06-06
          • 2014-12-27
          • 2019-04-19
          • 2013-05-15
          • 2012-09-28
          • 2010-11-28
          • 2012-12-23
          • 1970-01-01
          • 2018-06-12
          相关资源
          最近更新 更多