首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在<li>和<div>之后删除文本

如何在<li>和<div>之后删除文本
EN

Stack Overflow用户
提问于 2020-08-14 23:49:05
回答 5查看 70关注 0票数 1

我想删除<li>中的"Text"

这是我的尝试:

代码语言:javascript
复制
window.onload = function() {
  var str = document.getElementsByClassName("slide-2")[0].innerHTML; 
  var res = str.replace("Text", "Hello");
  document.getElementsByClassName("slide-2")[0].innerHTML = res;
}
代码语言:javascript
复制
<ul class="box1">
    <li class="slide-1">001</li>
    <li class="slide-2"><div data-rel="Text" class="slide-2"><img src=".."></div>Text</li>
    <li class="slide-3">003</li>
</ul>

<ul class="box2">
    <li class="slide-1">001</li>
    <li class="slide-2"><div data-rel="Text" class="slide-2"><img src=".."></div>Text</li>
    <li class="slide-3">003</li>
</ul>

它不起作用,因为"data-rel"与我要删除的文本具有相同的值。

我不能更改或删除"data-rel"中的值。

EN

回答 5

Stack Overflow用户

发布于 2020-08-15 00:04:27

您可以使用nodeValue设置节点的文本内容,而不会中断其他子元素。

代码语言:javascript
复制
const node = document.querySelector("li.slide-2").childNodes[1];
node.nodeValue = node.nodeValue.replace(/Text/g, "Hello");

const dataset = document.querySelector("div.slide-2").dataset;
console.log("is the `data-rel` attribute still `Text`?", dataset);
代码语言:javascript
复制
<ul class="box1">
    <li class="slide-1">001</li>
    <li class="slide-2"><div data-rel="Text" class="slide-2"><img src=".."></div>Text</li>
    <li class="slide-3">003</li>
</ul>

<ul class="box2">
    <li class="slide-1">001</li>
    <li class="slide-2"><div data-rel="Text" class="slide-2"><img src=".."></div>Text</li>
    <li class="slide-3">003</li>
</ul>

或者,如果要替换多个匹配项:

代码语言:javascript
复制
for (const node of [...document.querySelectorAll("li.slide-2")]) {
  const child = node.childNodes[node.childNodes.length-1];
  child.nodeValue = child.nodeValue.replace(/Text/g, "Hello");
}
代码语言:javascript
复制
<ul class="box1">
    <li class="slide-1">001</li>
    <li class="slide-2">
      <div data-rel="Text" class="slide-2">
        this Text won't be touched... 
      </div>
      Text and some more Text text.
    </li>
    <li class="slide-3">003</li>
</ul>

<ul class="box2">
    <li class="slide-1">001</li>
    <li class="slide-2">
      <div data-rel="Text" class="slide-2">
        this Text also won't be touched... 
      </div>
      Text
    </li>
    <li class="slide-3">003</li>
</ul>

如果您想要强制使用单词边界而忽略Textual,请考虑使用/\bText\b/g

对子<div>和父<li>应用slide-2类名可能是一个潜在的反模式。

票数 0
EN

Stack Overflow用户

发布于 2020-08-15 00:09:13

代码语言:javascript
复制
var str = document.getElementsByClassName("slide-2")[0].innerHTML; 
      var res = str.replace(/Text/gi, "Hello");
      document.getElementsByClassName("slide-2")[0].innerHTML = res;
代码语言:javascript
复制
<ul class="box1">
    <li class="slide-1">001</li>
    <li class="slide-2"><div data-rel="Text" class="slide-2"><img src=".."></div>Text</li>
    <li class="slide-3">003</li>
</ul>

<ul class="box2">
    <li class="slide-1">001</li>
    <li class="slide-2"><div data-rel="Text" class="slide-2"><img src=".."></div>Text</li>
    <li class="slide-3">003</li>
</ul>

票数 0
EN

Stack Overflow用户

发布于 2020-08-15 00:15:10

选择childNodes,循环遍历并查找包含要匹配的文本的文本节点(3)。

代码语言:javascript
复制
window.onload = function() {
  var lis = document.getElementsByClassName("slide-2");
  Array.from(lis).forEach(function(li) {
    var textNode = Array.from(li.childNodes).find(function(node) {
      // return node.nodeType == 3;
      return node.nodeType == 3 && node.nodeValue === "Text";
    })
    // if (textNode) textNode.nodeValue = "";
    if (textNode) textNode.remove();
  })
}
代码语言:javascript
复制
<ul class="box1">
  <li class="slide-1">001</li>
  <li class="slide-2">
    <div data-rel="Text" class="slide-2"><img src=".."></div>Text</li>
  <li class="slide-3">003</li>
</ul>

<ul class="box2">
  <li class="slide-1">001</li>
  <li class="slide-2">
    <div data-rel="Text" class="slide-2"><img src=".."></div>Text</li>
  <li class="slide-3">003</li>
</ul>

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63416043

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档