【问题标题】:javascript highlighter for a text inside html [duplicate]html中文本的javascript荧光笔[重复]
【发布时间】:2018-10-27 12:13:27
【问题描述】:

一段时间以来,我一直在尝试编写一个 js 函数,该函数将突出显示(粗体)包含 html 标签的字符串中搜索到的文本的每一次出现。

例子:假设字符串是

<b>test string</b> -- Bette <b>Higgins</b>

如果我搜索字符“b”,结果应该是

<b>test string</b> -- <b>B</b>ette <b>Higgins</b>

(如您所见,每次出现的 B 都应该用 html 粗体标记包围。

我尝试使用各种正则表达式都没有成功。

有什么想法吗?

谢谢

【问题讨论】:

  • 你搜索过吗?我确信在这个问题上存在很多问题。
  • 如果一般来说,就像 SO 节目 (stackoverflow.com/a/1732454/521598) 上的一个众所周知的答案,你真的没有可靠的方法来用正则表达式解析 HTML,也许你可以尝试适应你的情况给 JS 这个stackoverflow.com/q/7891771/521598
  • 是的,我在 SO 中进行了很多搜索,但是对于每个解决方案,我的第一个 (包含文本的开始标记)也被突出显示。为了清楚起见,我不是在寻找正则表达式解决方案,任何解决方案都将不胜感激

标签: javascript regex


【解决方案1】:

您可以在元素内重构字符串,并在每次出现“SearchTerm”时用标签包围。

var str = "Hi, how's it going?"
var result = "";
var searchTerm = "it";
for (var i = 0; i <= str.length - searchTerm.length; i++) {
  if(str.substring(i, i + searchTerm.length) == searchTerm){
    result += "<b>" + str.substring(i, i + searchTerm.length) + "</b>";
    i += searchTerm.length - 1;
  } else {
    result += str.charAt(i)
  }
}
console.log(result);

希望这会有所帮助。

【讨论】:

  • 嗨,感谢您的回复,但这将替换搜索文本的每一个出现(甚至是 html 选项卡、样式属性中的那个),对吗?我不应该替换 html 标签中的出现。
  • 这取决于你传递给它的字符串。你需要它绕过html标签中的内容吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-02-14
  • 2021-02-14
  • 2011-05-06
  • 2011-12-04
  • 1970-01-01
  • 2015-03-27
  • 1970-01-01
相关资源
最近更新 更多