javascript - 如何删除直接包含字符串的元素 - 忽略子元素

标签 javascript html indexof children

我正在尝试找出如何使用纯 JavaScript 删除页面上包含特定字符串的元素。

这是我目前的代码:

var elements = document.querySelectorAll("body > *");
for (var i = 0, len = elements.length; i < len; i++) {
    var current = elements[i];

    if (current.innerHTML.indexOf("Word") !== -1) {
        current.parentNode.removeChild(current);
    }
}

这能够删除包含短语“word”的元素。但是,它会向下挖掘一个 div 子节点,如果子节点包含该字符串,则返回 true。

我该如何更改它,以便它检查元素是否直接包含字符串并在搜索当前元素时忽略子元素。

代码仍应搜索每个元素,但不会进入子节点。

不返回 -1(返回 true 以包含该词):

<div>Word</div>

<p>Word</p>

是否返回 -1(返回 false 以包含该词):

<div><p>Word</p></div>

<div><div>Word</div></div>

非常感谢任何帮助,谢谢!

最佳答案

var word = "Word"
var elements = document.querySelectorAll("body > *");
function removeContainingText(element) {
  var children = Array.from(element.childNodes)
  for (var i = 0; i<children.length; ++i){
    if (children[i].nodeType == 3){
        if (children[i].nodeValue.indexOf(word) !== -1) {
            children[i].parentNode.removeChild(children[i]);
        }
    }
  }
}
for (var k = 0; k < elements.length; ++k){
    removeContainingText(elements[k])   
}

关于javascript - 如何删除直接包含字符串的元素 - 忽略子元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46017414/

相关文章:

javascript - jQuery - 插件选项默认 extend()

javascript - 我在面试中能够解决 addNum(4,5) 和 addNum(4)(5),但是如果 addNum(1)(2)...(N) 呢?

javascript - 在数组上使用indexOf方法,获取所有索引而不仅仅是第一个索引

javascript - 将 mongo 返回的对象中的键值存储在 Meteor 中

javascript - Firebase 按内部数组值查询

html - 为什么当我添加 `span` 标签时文本显示正确

jquery - 具有 jQuery 宽度的 CSS 动画仍然可见 0%

javascript - 使用 JavaScript 函数参数切换多个元素

javascript - 用连字符替换字符串中的空格

javascript - 为什么 Array.indexOf() 对一个 redux Action 正确工作,但对另一个 Action 却不行? (相同的 reducer )