javascript - 将字符串中的多个表行追加到现有表

标签 javascript html dom

我的 AJAX 请求以字符串格式响应以下数据:

<tr> <td>data</td> <td>data</td> <td>data</td> </tr>
<tr> <td>data</td> <td>data</td> <td>data</td> </tr>
<tr> <td>data</td> <td>data</td> <td>data</td> </tr>
<tr> <td>data</td> <td>data</td> <td>data</td> </tr>

我想将此 HTML 附加到现有表格。

<table id="demo">
  <tr> <td>data</td> <td>data</td> <td>data</td> </tr>
  <tr> <td>data</td> <td>data</td> <td>data</td> </tr>
  <tr> <td>data</td> <td>data</td> <td>data</td> </tr>
</table>

我已经从 DOM 中选择了表格元素。

const table = document.getElementById('demo');

我希望能够执行如下操作,但是使用 appendChild 方法当然不可能实现这一点。

table.appendChild(xhr.responseText);

我正在努力完成的工作是否可以仅使用 DOM(不使用库)来完成,如果可以,我该如何正确使用它?

最佳答案

这正是Element#insertAdjacentHTML被设计用于。这可以防止使用 Element#innerHTML 再次通过解析器发送所有现有 HTML 时造成的浪费,这对于大型表来说可能成本高昂,进而会删除任何可能绑定(bind)的事件监听器现有元素以及对将被销毁的现有 DOM 节点的引用。

通常使用此方法比 Element#innerHTML 更安全。

这是一个简单的示例,可实现您在问题中请求的结果:

const rows = `
  <tr> <td>data</td> <td>data</td> <td>data</td> </tr>
  <tr> <td>data</td> <td>data</td> <td>data</td> </tr>
  <tr> <td>data</td> <td>data</td> <td>data</td> </tr>
  <tr> <td>data</td> <td>data</td> <td>data</td> </tr>
`;

const table = document.getElementById('demo');
table.insertAdjacentHTML('beforeend', rows);
<table id="demo">
  <tr> <td>data</td> <td>data</td> <td>data</td> </tr>
  <tr> <td>data</td> <td>data</td> <td>data</td> </tr>
  <tr> <td>data</td> <td>data</td> <td>data</td> </tr>
  <tr> <td colspan="3"><hr></td> </tr>
</table>

以下示例显示了每个位置的行为:

const table = document.getElementById('demo');

const rows = data => `
  <tr> <td>${data}</td> <td>${data}</td> <td>${data}</td> </tr>
  <tr> <td>${data}</td> <td>${data}</td> <td>${data}</td> </tr>
`;
/** <= ECMAScript 2015 
 * function rows(data) { 
 *   return [ '<tr> <td>','</td> <td>','</td> <td>','</td> </tr>' +
 *            '<tr> <td>','</td> <td>','</td> <td>','</td> </tr>' ].join(data);
 * }
 **/

const insert = position => table.insertAdjacentHTML(position, rows(position));
/** <= ECMAScript 2015 
 * function insert(position) { 
 *   return table.insertAdjacentHTML(position, rows(position));
 * }
 **/

const positions = ['beforebegin', 'afterbegin', 'beforeend', 'afterend'];

positions.forEach(insert);
<table id="demo">
  <tr> <td>existing data</td> <td>existing data</td> <td>existing data</td> </tr>
  <tr> <td>existing data</td> <td>existing data</td> <td>existing data</td> </tr>
</table>

关于javascript - 将字符串中的多个表行追加到现有表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47964680/

相关文章:

javascript - 如果数组具有匹配的字符串,则返回 Angular 自定义过滤器

html - 需要在自定义插件的 CSS/HTML 中使图像响应

javascript - 比较 jQuery 中对象的 InnerHTML

javascript - 检测宽度 : auto in jQuery

javascript - 组织我的 JavaScript 函数库

javascript - Facebook JavaScript SDK 意外行为

javascript - 离线存储内容直至建立连接

javascript - 如何使用 javascript 显示 XML 文档对象?

javascript - 为什么在 HTML 中调用函数之前要添加 "javascript:"?

javascript - 围绕按钮链接到链接的按钮