javascript - 如何在 contenteditable 失去焦点并以编程方式重新获得焦点后再次获得选定的文本焦点
问题描述
我有一个 contenteditable 属性为 true 的 div,
<div tabindex="1" id="editor" contenteditable="true"></div>
我有另一个像按钮一样的 div
<div>Click Me</div>
遇到的问题是,在编辑器框中输入后,我选择了一些文本,当我单击“单击我”div 时,编辑器框失去焦点,从而删除突出显示的文本。
我在 js 中使用以编程方式将焦点发回
document.getElementById("editor").focus()
但在此之后,选定的文本不再被选中,光标只是移动到编辑器框的开头。
如何获得焦点以确保在单击单击我后再次选择初始选定的文本
解决方案
一种解决方案是设置user-select: none
您的类似按钮的div
. 如果你关心的浏览器支持它,它是最简单的(但正如这里的评论中所讨论的,有人报告了让它在 Safari 中工作的问题......)
否则,您必须使用 JS 保存和恢复选择,rangy.js 的文本范围模块对此很有用。查看https://stackoverflow.com/a/57546051/1026以获取使用示例;在您的情况下,您需要保存选择 onblur 并在处理类似按钮的点击后恢复它div
。
推荐阅读
- python - 如何使用 daframe 中的数据从 python 更新表
- javascript - 如何在 NuxtAuth v.4 中获取令牌值?
- firebase - 在 Kotlin 中处理收集的正确方法是什么?
- python-3.x - 小部件不可用。请安装 widgetsnbextension 或 ipywidgets 4.0
- java - 我的应用程序无法在 android 6 上运行,但如果在 android 9-11 上运行则可以运行
- bash - bash while 循环给出语法错误,说缺少'['
- android - 如何使用适用于 Android 和 iOS 的 Xamarin 表单在特定频道上的 youtube 上上传视频?
- javascript - 部署到 github 页面时不显示图像
- c# - MassTransit - 未消耗随机中介响应
- javascript - 单击按钮时如何删除特定元素