【发布时间】:2016-07-15 06:06:21
【问题描述】:
我正在编写一个 Chrome 扩展程序,它在每个匹配某个正则表达式的字符串周围添加一个 <span> ... </span>。正则表达式匹配完美,但我似乎无法找到在文本周围正确添加 span 标记的方法。
到目前为止我的代码是:
// main.js
var regex_pattern = new RegEx('(apple)', 'g'); // Let's pretend I want to match every instance of 'apple'
var textNodes = getTextNodes(); // A function that returns a list of every text node from the DOM
for (var i = 0; i < textNodes.length; i++) {
if (textNodes[i].nodeValue.match(regex_pattern)) {
textNodes[i].nodeValue = textNodes[i].nodeValue.replace(regex_pattern, "<span class='highlight'>$&</span>");
}
}
这将正确识别我的 RegEx 模式的每个匹配项(在本例中为“apple”)并输出 <span class="highlight">apple</span>。唯一的问题是 Chrome 不会将其视为 HTML,而是将其视为文本 - 因此,不会看到根据 highlight 类设置样式的世界“苹果”,而是会看到文字输出:<span class="highlight">apple<span>
为什么会发生这种情况,我该如何解决它以便正确应用样式?意识到这不太理想,我尝试使用insertBefore() 方法将匹配的文本包装在一个跨度中,但这没有做任何事情,它会出错或无法添加span 节点,具体取决于如何我调整了代码。感谢您提供的任何见解!
【问题讨论】:
-
你需要使用
createElement(developer.mozilla.org/en-US/docs/Web/API/Document/createElement)
标签: javascript regex google-chrome dom google-chrome-extension