javascript - 单击单词时更改文本颜色
问题描述
我正在尝试创建一个应用程序,用户可以在单击(或双击)特定单词时突出显示该特定单词。也就是说,用户可以点击文章中任何段落中的任何单词,并通过更改其背景颜色或更改其字体颜色来突出显示它。
不过,我遇到了麻烦,弄清楚如何做到这一点。我不想突出显示整个段落,也不想将每个单词包装在一个独特的组件或 html 标记中。我基本上想要的是整篇文章的包装组件,它只记录被点击的特定单词,然后让我决定我想要更改的那个单词的 css 属性(例如背景颜色或文本颜色)。
但我无法弄清楚如何做到这一点。有没有一个图书馆已经这样做了。如果没有,我怎样才能将文章作为一个整体包装,但可以访问被点击的单数词?
对于它的价值,我正在使用 React 创建应用程序。
解决方案
您可以使用此方法访问页面中的选定文本:
window.getSelection()
现在我们可以编辑页面中的任何选定文本,如下所示:
window.getSelection().anchorNode.parentElement.innerHTML =
window.getSelection().anchorNode.parentElement.innerHTML.replace(
window.getSelection().toString() ,
"<b>" +
window.getSelection().toString() +
"</b>"
)
此代码使所选文本变粗以更改颜色或突出显示您可以尝试以下操作:
window.getSelection().anchorNode.parentElement.innerHTML =
window.getSelection().anchorNode.parentElement.innerHTML.replace(
window.getSelection().toString() ,
"<span style='color:red;'>" +
window.getSelection().toString() +
"</span>"
)
希望有用:)
推荐阅读
- python - 如何解释这个
- reactjs - 如何使用 react-leaflet containerPointToLatLng?
- python - 将json数据转换为字典
- php - 限制用户使用中间件 - Laravel
- matlab - 如何根据 MATLAB 中的某些条件将值添加到表的最后一列?
- android - 如何在 Room Dao 函数中更新实体的 TypeConverted 列
- css - CSS Grid 嵌套在 wrapper-div 或 body 元素中?
- node.js - 相当于 nodeJS express 中的 rails 控制台
- python - 无法使用 [dot]module 导入模块
- computer-vision - 使用深度学习特征的 SLAM 系统?