javascript - 使用 Javascript 突出显示同一页面上多个文本区域上的特定单词
问题描述
我想突出显示以 10 编写的特定单词(例如绿色和蓝色)。我找到了一个 Javascript 代码,它突出显示了页面上任何地方写的 a、p、按钮 etx 中的单词。但是该代码没有突出显示在 textarea 中编写的单词。我找到的代码是 -
'<p>Hello world lorem ipsum dolor sit amet, consectetur adipisicing
elit. Est vel accusantium
totam, ipsum delectus et dignissimos mollitia!</p>
<p>
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Numquam, corporis.
<small>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Accusantium autem voluptas
perferendis dolores ducimus velit error voluptatem, qui rerum modi? this is amet in the
wall</small>
</p>
<textarea>hello amet this</textarea>
<style>
.highlight {
background: lightpink;
}
</style>
<script>
function highlight(elem, keywords, caseSensitive = false, cls = 'highlight') {
const flags = caseSensitive ? 'gi' : 'g';
keywords.sort((a, b) => b.length - a.length);
Array.from(elem.childNodes).forEach(child => {
const keywordRegex = RegExp(keywords.join('|'), flags);
if (child.nodeType !== 3) {
highlight(child, keywords, caseSensitive, cls);
} else if (keywordRegex.test(child.textContent)) {
const frag = document.createDocumentFragment();
let lastIdx = 0;
child.textContent.replace(keywordRegex, (match, idx) => {
const part = document.createTextNode(child.textContent.slice(lastIdx, idx));
const highlighted = document.createElement('span');
highlighted.textContent = match;
highlighted.classList.add(cls);
frag.appendChild(part);
frag.appendChild(highlighted);
lastIdx = idx + match.length;
});
const end = document.createTextNode(child.textContent.slice(lastIdx));
frag.appendChild(end);
child.parentNode.replaceChild(frag, child);
}
});
}
highlight(document.body, ['lorem', 'amet', 'autem']);
</script>
'
解决方案
您不能在 中使用标签span
,textarea
您可以contenteditable="true"
在 div 上使用 a 而不是textarea
.
这篇文章可能有用。
推荐阅读
- c# - Application not showing updated string value
- python-3.x - convert the image to rgb so that i can visualize the image
- php - 成功登录我的网站后,如何正确地进行会话
- php - 如何通过许多 id-s 从 DB 中获取行
- fortran - How to fix 'undefined reference to _gfortran_concat_string and to _gfortran_etime when building MXNET?
- php - magento 2 使用 installschema 在多个列上添加唯一键
- javascript - 将格式正确的 JSON 对象从 PHP 返回到 JS
- javascript - 从 JSON 创建具有多列的饼图
- html - 我想在同一个 ts 文件下包含多个 html?
- python - 在 csv 中读取耶稣诞生时的 Python 3 'NoneType'