javascript - 使用javascript从html表中删除元素

标签 javascript html html-table iteration removechild

我正在尝试使用 javascript 从 html 表中删除某些元素。更具体地说,我需要删除所有不包含两个子字符串的节点。

我试过把不包含这两个子串的节点的位置保存下来,然后去掉。

var posToRemove = [];
var tbody = document.getElementsByTagName("tbody")[0];
var trTags = tbody.getElementsByTagName("tr");
var substring0 = "Foo";
var substring1 = "Bar";

for (i = 0; i < trTags.length; i++) {
  var trTextContent = trTags[i].textContent;
  if (trTextContent.indexOf(substring0) !== -1 || trTextContent.indexOf(substring1) !== -1) {
    //do something
  } else {
    posToRemove.push(i);
  }
}

for (i = 0; i < posToRemove.length; i++) {
  trTags[posToRemove[i]].remove();
}
<table>
  <tbody>
    <tr>
      <td><a href="https://example.org">Foo</a></td>
      <td>Description</td>
      <td>2019</td>
    </tr>
    <tr>
      <td><a href="https://example.org">Test</a></td>
      <td>Description</td>
      <td>2018</td>
    </tr>
    <tr>
      <td>Bar</td>
      <td>Description</td>
      <td>2017</td>
    </tr>
    <tr>
      <td><a href="https://example.org">Foo</a></td>
      <td>Description</td>
      <td>2019</td>
    </tr>
    <tr>
      <td><a href="https://example.org">Test</a></td>
      <td>Description</td>
      <td>2018</td>
    </tr>
    <tr>
      <td>Bar</td>
      <td>Description</td>
      <td>2017</td>
    </tr>
    <tr>
      <td>Bar</td>
      <td>Description</td>
      <td>2017</td>
    </tr>
    <tr>
      <td>Bar</td>
      <td>Description</td>
      <td>2017</td>
    </tr>
    <tr>
      <td><a href="https://example.org">Foo</a></td>
      <td>Description</td>
      <td>2019</td>
    </tr>
    <tr>
      <td><a href="https://example.org">Foo</a></td>
      <td>Description</td>
      <td>2019</td>
    </tr>
    <tr>
      <td><a href="https://example.org">Test</a></td>
      <td>Description</td>
      <td>2018</td>
    </tr>
  </tbody>
</table>

遗憾的是没有像预期的那样工作。它不会只在表中留下包含这两个字符串之一的元素。我检查了数组中保存的位置,都是正确的。

最佳答案

.push() posToRemove 的元素而不是 i并替换 posToRemove[i].remove()对于 trTags[i].remove() .此外,每个字符串的第一个字符应该是大写而不是小写以匹配 "Foo""Bar" .

var posToRemove = [];
var tbody = document.getElementsByTagName("tbody")[0];
var trTags = tbody.getElementsByTagName("tr");
var substring0 = "Foo";
var substring1 = "Bar";

for (let i = 0; i < trTags.length; i++) {
  var trTextContent = trTags[i].textContent;
  if (trTextContent.indexOf(substring0) !== -1 || trTextContent.indexOf(substring1) !== -1) {
    //do something
  } else {
    posToRemove.push(trTags[i]);
  }
}

for (let i = 0; i < posToRemove.length; i++) {
  posToRemove[i].remove();
}
<table>
<tbody>
<tr>
  <td><a href="https://example.org">Foo</a></td>
  <td>Description</td>
  <td>2019</td>
</tr>
<tr>
  <td><a href="https://example.org">Test</a></td>
  <td>Description</td>
  <td>2018</td>
</tr>
<tr>
  <td>Bar</td>
  <td>Description</td>
  <td>2017</td>
</tr>
</tbody>
</table>

关于javascript - 使用javascript从html表中删除元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54499462/

相关文章:

javascript - Visual Studio Code, block 范围声明

javascript - 关闭其他子菜单

javascript - jQuery 检查行,创建检查行第一列数组并使用 ajax 发布

css - 如何让 Outlook 正确显示我的表格

javascript - 我们可以用 cypress 测试元素文本是否包含 text_A 或 text_B 吗?

javascript - 这些文档就绪类型之间有什么区别?何时使用它们?

javascript - 使用 jquery 设置多个选项值的样式 : Code works for a few option values only

javascript - JQuery检查多个输入值是否相同

html - 如何让屏幕阅读器使用 aria 阅读禁用的元素?

c# - 从逗号分隔列表生成 HTML 表头