在前端开发中,有时需要检测一个单词是否被用户用鼠标或键盘的方式选择(即高亮)了。这个功能通常用于文本编辑器、富文本编辑器、搜索引擎等场景中。在本文中,我们将介绍如何使用 JavaScript 实现这一功能。
通过 Selection 对象获取选中文本
JavaScript 中的 Selection 对象表示用户当前选择的文本区域。要获取 Selection 对象,可以使用以下代码:
----- --------- - ----------------------
然后,就可以通过 Selection 对象获取选中的文本:
----- ------------ - ---------------------
检测指定单词是否被选中
有了选中的文本,接下来就是判断指定的单词是否被选中了。我们可以使用正则表达式来实现:
-------- -------------------- - ----- --------- - ---------------------- -- ---------------------------- --- --- - ------ ------ - ----- ------- - --- ------------ - ---- - ------ ----- ------ ----------------------------------- -
上面的函数接受一个字符串参数 word
,并返回一个布尔值表示该单词是否被选中。首先,我们获取当前的选中文本,如果为空,则说明没有选中任何内容,直接返回 false
。然后,我们使用 \b
匹配单词边界,加上 i
参数表示不区分大小写。最后,使用正则表达式的 test
方法来检测选中文本中是否包含该单词。
示例代码
以下是一个完整的示例,演示如何在页面上检测用户是否选择了指定的单词:
--------- ----- ----- ---------- ------ ----- ---------------- ----------- --------- ----------------- ------- ---------- - ----------------- ------- - -------- ------- ------ --------- - ---- -- --- -- ---- ---------------- --- ----- ----- ----- --- ----- ----------- ---------- ----- --- -- ---- ------ ----- ----- --------- ------- ------- ------- ---- --- --------- ---------- ----- ------ --------- --- --- -------- ----- ---- -- ----- --- ----------- ---- --- ------ ---------- -------- --- ------ ----- ------ -- -------- ----- ---- ------- ------ ---- -------- -------- -------------------- - ----- --------- - ---------------------- -- ---------------------------- --- --- - ------ ------ - ----- ------- - --- ------------ - ---- - ------ ----- ------ ----------------------------------- - ------------------------------------ ---------- - ----- ---- - -------------- ----- ---------- - --------------------- -- ------------ - ---------- ---- --------- -- --------------- - --- --------- ------- -------
以上代码展示了一个页面,其中包含一个段落,用户可以在其中选择单词。当用户选择了指定的单词(本例中为 consectetur
)时,会弹出一个信息框提示该单词已被高亮选中。
结论
本文介绍了如何使用 JavaScript 检测一个单词是否被高亮选中。通过获取 Selection 对象和使用正则表达式,我们可以方便地实现这一功能,并在文本编辑器、富文本编辑器、搜索引擎等场景中使用。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/27775