Jquery 在 DOM .append .after 之后获取更新的表格元素

Posted

技术标签:

【中文标题】Jquery 在 DOM .append .after 之后获取更新的表格元素【英文标题】:Jquery get updated table elements after DOM .append .after 【发布时间】:2020-01-07 07:34:39 【问题描述】:

简而言之,我需要从表中获取第一列数据,包括附加了 jQuery 的行。

下面是我使用 jQuery 向 html 表中添加一行的代码。这一切都按预期工作,但是变量firstColumns(它从表的第一列收集值)不包括额外单击“添加行”按钮所附加的行。 额外的行将需要所有列的数据,包括所有附加的,希望有人知道如何从刷新的 DOM 中获取这些数据?

$(document).ready(function() 

  $("#add").on("click", function() 

    var firstColumns = [];

    $("table#personalPrices tr").each(function() 
      var val = $(this).find("th:first").text();
      firstColumns.push(val);
    );

    var existingRow = $('table#personalPrices tbody>tr:nth-child(1)').next('tr');

    var newRow = '<tr><td>4 + 23</td><td>test3</td></tr>';

    existingRow.after(newRow);

    console.log(firstColumns);
  );

);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table id="personalPrices">
  <tbody>
    <tr>
      <th>1 + 23</th>
      <td>test1</td>
    </tr>
    <tr>
      <th>3 + 23</th>
      <td>test2</td>
    </tr>
  </tbody>
</table>
<button id="add">Add Row</button>

【问题讨论】:

您正在使用&lt;td&gt; 添加新行,而填充firstColumns 的函数正在寻找&lt;th&gt;。所以你想要这个:var newRow = '&lt;tr&gt;&lt;th&gt;4 + 23&lt;/th&gt;&lt;td&gt;test3&lt;/td&gt;&lt;/tr&gt;'; 或者你将每个&lt;th&gt; 更改为&lt;td&gt; 并找到"td:first" 请在下面查看我的答案。 【参考方案1】:

正如@calvin-nunes 所提到的,您只添加了&lt;td&gt;,但同时您试图找到&lt;th&gt;。在这种情况下,您只需按如下方式更新您的代码:

$("#add").on("click", function() 
    var firstColumns = [];
		debugger;

    $("table#personalPrices tr").each(function() 
      var val = $(this).find("th:first").text();
      firstColumns.push(val);
    );

    var existingRow = $('table#personalPrices tbody>tr:nth-child(1)').next('tr');

    var newRow = '<tr><th>4 + 23</th><td>test3</td></tr>';

    existingRow.after(newRow);

    console.log(firstColumns);
  );
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table id="personalPrices">
  <tbody>
    <tr>
      <th>1 + 23</th>
      <td>test1</td>
    </tr>
    <tr>
      <th>3 + 23</th>
      <td>test2</td>
    </tr>
  </tbody>
</table>
<button id="add">Add Row</button>

【讨论】:

【参考方案2】:

$(document).ready(function() 

  $("#add").on("click", function() 
    var existingRow = $('table#personalPrices tbody>tr:nth-child(1)').next('tr');

    var newRow = '<tr><td>4 + 23</td><td>test3</td></tr>';

    existingRow.after(newRow);
    var firstColumns = [];

    $("#personalPrices tr").each(function() 
      var val = $(this).find("td:eq(0)").html();
      firstColumns.push(val);
    );

    console.log(firstColumns);
  );

);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table id="personalPrices">
  <tbody>
    <tr>
      <td>1 + 23</td>
      <td>test1</td>
    </tr>
    <tr>
      <td>3 + 23</td>
      <td>test2</td>
    </tr>
  </tbody>
</table>
<button id="add">Add Row</button>

【讨论】:

只发代码不解释不是好答案,请阅读How to Answer 如果需要,他/她可以要求解释。 @CalvinNunes SO 的工作方式并非如此...您阅读了我在评论中发布的链接吗?但是,好的,这取决于你,否决票仍然存在 哈哈哈你真的对我的许多答案投了反对票吗?好的,继续,您以正确的方式使用 ***,恭喜。拒绝我的答案比尊重 How to Answer 更容易,并添加一个简单的解释......

以上是关于Jquery 在 DOM .append .after 之后获取更新的表格元素的主要内容,如果未能解决你的问题,请参考以下文章

Jquery 在 DOM .append .after 之后获取更新的表格元素

.append 之后的 jQuery 函数

.append 到一个非 DOM 元素 jQuery

如何通过 jQuery 的 .append() 添加 DOM 元素(Angular 指令)?

如何通过jquery获取js动态append到html页面的dom属性

jQuery学习笔记之DOM树创建新节点append方法