javascript - 在 contenteditable = true div 中禁用文本选择
问题描述
我正在尝试禁用contenteditable=true
div
.
带有 id 的 divd
如下所示:
<div contenteditable="true" id="d" class="noselect">
</div>
<p id="log"></p>
我应用noselect
该类来禁用文本选择,如下所示:
.noselect {
-webkit-touch-callout: none; /* iOS Safari */
-webkit-user-select: none; /* Safari */
-khtml-user-select: none; /* Konqueror HTML */
-moz-user-select: none; /* Firefox */
-ms-user-select: none; /* Internet Explorer/Edge */
user-select: none; /* Non-prefixed version, currently
supported by Chrome and Opera */
}
但这似乎不起作用。我仍然可以ctrl+a
,或者拖动并选择所有文本。我怎么能禁用选择?
这也是它的小提琴:https ://jsfiddle.net/hpeLqmyg/1/
解决方案
您可以通过设置“选择”伪元素来模仿无法使用选择:
.noselect::selection {
background: transparent;
color: //noselect's color;
}
要真正禁用选择功能,您可以收听“点击”事件并检查您的元素是否有选择。如果确实如此,则取消它:
const noselect = document.getElementById('d');
const setCaret = (target, position = 0) => {
const range = document.createRange();
const sel = window.getSelection();
range.setStart(target.childNodes[0], position);
range.collapse(true);
sel.removeAllRanges();
sel.addRange(range);
};
noselect.addEventListener('click', (e) => {
const range = window.getSelection().getRangeAt(0);
const { startOffset, endOffset } = range;
if (endOffset - startOffset > 1) {
setCaret(noselect, endOffset);
}
});
推荐阅读
- python - 取熊猫数据框中多列的平均值
- javascript - React-chartjs-2 动态更新高度
- php - 在我的 Laravel 应用程序中为用户集成 OnlieMeeting MS (Graph api)
- kubernetes - 如果发布大型 json,用于自动审查应用程序(gitlab-managed-apps)的入口 NGINX 非常慢
- ios - SwiftUI“线程1:EXC_BAD_INSTRUCTION(代码=EXC_I386_INVOP,子代码=0x0)”弹出时
- python - 将新项目添加到 Windows 上下文菜单(右键菜单)
- angular - 添加路由器存储配置 RouterState.Full 会引发神秘的错误消息
- java - java.lang.AssertionError:状态 404
- c++ - 不要使用静态转换进行算术转换(cpp-core-guidelines)
- javascript - 找不到变量 atob React Native+Firebase 错误