如何删除具有特定innerHTML的所有元素

时间:2021-04-13 04:16:59

标签: javascript html jquery

function checkIfBlank() {
  let li = document.getElementsByClassName("li");
  for (var i = 0; i < li.length; i++) {
  if (li[i].innerHTML === "hello") {
    li[i].parentElement.remove();
  }
  }
}
<li>
    <span class="li">hi</span>
</li>
<li>
    <span class="li">hi</span>
</li>
<li>
    <span class="li">hi</span>
</li>
<li>
    <span class="li">hello</span>
</li>
<li>
    <span class="li">hello</span>
</li>
<li>
    <span class="li">hello</span>
</li>

我有这个函数可以删除具有“hello”的innerHTML的跨度的父元素

在这种情况下,我希望代码删除带有 hello 的innerHTML的所有元素

但事实证明它只在执行函数时删除一个元素

有人可以帮我吗?我不是很好xD

3 个答案:

答案 0 :(得分:1)

您可以使用 jquery 删除带有匹配文本的 li 我希望您能得到答案。

$('li:contains("hello")')
 .next('span').remove().end()
 .remove();
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<li>
    <span class="li">hi</span>
</li>
<li>
    <span class="li">hi</span>
</li>
<li>
    <span class="li">hi</span>
</li>
<li>
    <span class="li">hello</span>
</li>
<li>
    <span class="li">hello</span>
</li>
<li>
    <span class="li">hello</span>
</li>

享受我的代码;)

答案 1 :(得分:1)

出于此类目的,使用 Array.from(element) 更安全。

function checkIfBlank() {
    let li = document.getElementsByClassName("li");
    Array.from(li).forEach(function (li_curr) {
        if (li_curr.innerHTML == "hello") {
            li_curr.parentElement.remove();
        }
    });
}

checkIfBlank();
<ul>
    <li>
        <span class="li">hi</span>
    </li>
    <li>
        <span class="li">hi</span>
    </li>
    <li>
        <span class="li">hi</span>
    </li>
    <li>
        <span class="li">hello</span>
    </li>
    <li>
        <span class="li">hello</span>
    </li>
    <li>
        <span class="li">hello</span>
    </li>
</ul>

jQuery 解决方案:

$('li:contains("hello")').remove();
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<ul>
    <li>
        <span class="li">hi</span>
    </li>
    <li>
        <span class="li">hi</span>
    </li>
    <li>
        <span class="li">hi</span>
    </li>
    <li>
        <span class="li">hello</span>
    </li>
    <li>
        <span class="li">hello</span>
    </li>
    <li>
        <span class="li">hello</span>
    </li>
</ul>

答案 2 :(得分:0)

你确定没有像这样的:

<span class="li">
    Hello
</span>

取而代之的是:

<span class="li">Hello</span>

我想到的第一件事是,如果有任何换行符或空格,那么您肯定需要在该 innerHTML 字符串上运行 .trim() 。但是,如果不是这样,我建议在某些地方使用一堆 console.log() 来查看它在 for 循环中的位置。

相关问题