javascript - 如何使以 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 开头的单词,并且我知道如何分配变量和替换字符串的特定部分。
我不知道在这种情况下如何将它们缝合在一起?
解决方案
如果你真的想通过一个简单的正则表达式来做到这一点,你可以使用这个:
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>
变得非常困难。
推荐阅读
- php - 将在 Doctrine/Symfony 4 中建立的关联插入 DB
- import - 如何在 STACKBLITZ JS 项目中导入 font-awesome?
- android - 无法使用 Albeacon 库找到信标
- python - 在 Qt Creator 中使用 Qt for Python 和 Cmake 设置一个完全可运行的项目
- batch-file - Windows 批处理文件 - 锁定进程
- html - 在jsp中放置表单标签以在Springmvc中单击时将控制权传递给控制器以播放视频文件
- r - 将行添加到具有零值的数据框
- azure-devops - 指向 github 存储库的多个分支的单个管道
- java - 向服务器发送 POST 请求,服务器的响应为空,Angular - Spring-boot
- hive - 为什么我在表达式规范中出现“无法识别 ')' 'mud' 'on' 附近的输入”错误?