首页 > 解决方案 > 如何使以 AB- 开头的单词可点击?

问题描述

这是一些基本的 HTML:

<p>Here is a reference: AB-AAA111</p>
<p>Here is a reference: AB-BBB222</p>
<p>Here is a reference: AB-CCC333, AB-DDD444</p>
<p>Here is a reference: AB-EEE555</p>

如您所见,每个段落都包含一个以 AB- 开头的引用

最终目标:在 Geasemonkey 中使用 JS / jQuery,使每个 AB 引用都可点击。例如:

<p>Here is a reference: <a href="localhost/AAA111"> AB-AAA111 </a> </p>

我知道如何使用正则表达式来挑选以 AB- /AB-\w+/gi 开头的单词,并且我知道如何分配变量和替换字符串的特定部分。

我不知道在这种情况下如何将它们缝合在一起?

标签: javascriptjquerygreasemonkey

解决方案


如果你真的想通过一个简单的正则表达式来做到这一点,你可以使用这个:

document.body.innerHTML = document.body.innerHTML
  .replace(/\bAB-(\w+)/g, '<a href="http://localhost/$1">$&</a>');

但是,请注意,仅替换 HTML 文档中的字符串总是一个非常糟糕的主意。想象一下,例如可能有一些类名,例如<div class="AB-123" id="abc">. 这种方法会破坏整个站点。不要在您无法控制的网站上使用它。

而是尝试仅解析文本节点。document为您evaluate提供在特定节点上工作的方法。您也可以搜索所有文本节点,例如:

let nodes = document.evaluate('//text()[contains(.,"AB-")]', document,
  null, XPathResult.UNORDERED_NODE_ITERATOR_TYPE, null);

这将为您提供一个可以迭代的节点列表nodes.iterateNext()。缺点是对超文本的解析AB-<b>123</b>变得非常困难。


推荐阅读