【发布时间】:2021-08-08 23:13:08
【问题描述】:
以下代码记录正在按下哪些键。如果前两个键与链接中的前两个字符匹配,则这些字符将突出显示。 (在这种情况下,“li”来自“link”。)
let keys = []
document.addEventListener('keypress', event => {
keys.push(event.key)
console.log(keys)
const selector = 'a'
let text = keys.join('')
let element = [...document.querySelectorAll(selector)]
.find(elements => elements.textContent.includes(text))
if (keys.length === 2) {
if (!element) {
keys = []
return
}
element.textContent = element.textContent.replace(text, `<strong>$1</strong>`)
}
})
<a href="#">link</a>
我想用<strong>标签突出显示字符。
我期待这个:
link
但我得到了这个:
<strong>$1</strong>nk
步骤:
- 按“运行代码 sn-p”
- 输入
l,然后输入i。
【问题讨论】:
-
您将替换
textContent用于文本,而不是用于 HTML。 -
另外,
$1用于正则表达式作为搜索条件,而不是字符串,因为字符串不能有捕获组。您可以使用$&,也可以使用函数:.replace(text, s => `<strong>${s}</strong>`) -
这种方法也有其他缺点,例如不考虑标签之间的匹配或破坏事件侦听器和标签引用。您可能会考虑为此目的使用库,例如 markjs.io
-
不需要图书馆。 DOM API 有多种文本节点的方法。我写了一些关于Finding and replacing parts of a document 和highlighting text in a document 的答案。
-
只需连接按键字符串 searchText =''; searchText += event.key;而不是推送到数组并调用 join;
标签: javascript html