当前位置: 首页 > 知识库问答 >
问题:

替换整个页面上多个单词的所有实例

云卓
2023-03-14

我有几个不同的单词需要使用Javascript替换为不同的单词。我想我可以使用replace函数来实现这一点,但它似乎只在第一次调用时起作用。

然而,由于我需要替换的单词彼此相似,这导致了某种问题,我不知道如何修复它。我还真的需要用Javascript而不是jQuery来做这件事。谢了。

例:

function color() {
document.body.innerHTML = document.body.innerHTML.replace(/A/g, "<span style='color:#FF0000;'>A</span>");
document.body.innerHTML = document.body.innerHTML.replace(/A1/g, "<span style='color:#0000FF;'>A1</span>");
}
<html>
  <body>
    <h3>A</h3>
    <h3>A1</h3>
    <button onclick="color()">click</button>
  </body>
</html>

共有1个答案

郭俊拔
2023-03-14

在几乎所有情况下,执行body.innerHTML替换都是错误的。它可能看起来适用于一些微不足道的示例,但对于任何非微不足道的应用程序,它都会失败。请参阅不要使用正则表达式解析超文本标记语言。

要了解为什么这种方法不可行,请考虑您的文档是否包含以下元素:

<div style="color: #AA144"></div>

您的正则表达式如何知道不要在这个属性字符串中为每个< code>A或< code>A1加上一堆跨度呢?不会的。

相反,使用文档对象模型,它是一个表示标记的树结构(所有的HTML解析都是为您完成的!).遍历树中的节点,操作每个节点的< code>textContent,执行替换:

for (const parent of document.querySelectorAll("body *")) {
  for (const child of parent.childNodes) {
    if (child.nodeType === Node.TEXT_NODE) {
      const pattern = /(A1|A)/g;
      const replacement = "<span style='color:#FF0000;'>$1</span>";
      const subNode = document.createElement("span");
      subNode.innerHTML = child.textContent.replace(pattern, replacement);
      parent.insertBefore(subNode, child);
      parent.removeChild(child);
    }
  }
}
body {
  background: white;
}
<div>
  foobar
  <div>
    <div style="color: #AA144">
      foobazz A1
    </div>
    foo quuz AA
    <h4>coraaAge</h4>
    <p>
      A bA bAA ello world A1
    </p>
  </div>
</div>
 类似资料:
  • 问题内容: 我想用php代替完整的单词 示例:如果我有 我用 新文本应如下所示 新hello1您好,Helloz PHP返回 NEW hello1 hello,NEWz 谢谢。 问题答案: 您要使用正则表达式。该单词边界匹配。 如果包含UTF-8文本,则必须添加Unicode修饰符“ u”,以便不会将非拉丁字符误解为单词边界:

  • 我想替换字符串中的一些单词。我有可行的解决方案,但我认为这不是最好的。你能帮我做些更有效的事情吗 代码是avaiable在这里:https://codepen.io/yasAFE/pen/BYOVme

  • 问题内容: 目的 我有一个简单的表,列出了名称(在局部视图中),并且在其上方有一个包含这些名称的下拉列表。目的是根据在下拉列表中选择的名称来过滤表。下拉列表中的选定值更改后,应立即进行过滤,并且应仅再次呈现部分视图。 问题 当我在下拉列表中选择一个值时,部分视图不会在其他视图中呈现,而是显示为整个页面。但是,当我在Ajax.BeginForm块中包含一个提交按钮并触发对提交按钮的操作时,它确实可以

  • 我正在使用以替换子字符串 我现在面临的问题是,只有在字符串替换不支持的情况下,我才想要替换整个单词。< br >因为我必须替换非常非常大的字符串,可能以GB为单位。与字符串替换相比,正则表达式非常慢。< br >例如:text: - 正则表达式将时间缩短了近 100 倍(https://medium.com/codezillas/golang-replace-vs-regexp-de4e48482

  • 大家好,我不需要答案,但我想知道并找出我做错了什么。作为一名初学者,我的学习任务非常“简单”。我需要创建一个字符串,在这个字符串中,我需要用其他单词替换一些单词,而不需要使用for循环:(我也想打印它,但我不知道该把Console.WriteLine放在哪里。谷歌搜索1小时不起作用,或者问了一个同事。 /*练习:与stringBuilder一起使用*猫变成小猫*狗变成小狗*老鼠变成小鼠*单词必须替

  • 我有一个数据框(我们称之为“littletext”),它有一列,每行中都有句子。我还有另一个表(我们称之为“littledict”),我想用它作为参考,以查找和替换“littletext”每行中的单词和/或短语。 这是我的两个数据帧。我在这个例子中对它们进行了硬编码,但会在“现实生活”中将它们加载为csv文件: 我希望按照下面的说明修改“littletext”,其中Python将查看“little