我正在尝试使用 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/