【发布时间】:2017-04-05 16:30:39
【问题描述】:
我面临以下问题:当我尝试在 contenteditable 元素中选择文本并且选择的结尾是元素内容的开始时,则不会触发 select 事件并且没有 Selection 和 @ 987654329@ 个对象。
有人可以就为什么会发生这种情况或如何防止这种情况给我任何建议吗?
负责获取选择范围的代码:
$('div[contenteditable="true"]').bind("mouseup keyup touchend", function() {
lastCaretIndex = getSelectionRange();
});
function getSelectionRange() {
var sel;
if (window.getSelection) {
sel = window.getSelection();
console.log(sel); // this doesn't print anything event empty string
if (sel.rangeCount) {
return sel.getRangeAt(0);
}
} else if (document.selection) {
return document.createRange();
}
return null;
}
<div id="main-input" contenteditable="true">Hello world!</div>
<script type="text/javascript" src="https://code.jquery.com/jquery-2.2.4.min.js"></script>
JSFiddle(打开您的浏览器控制台以确保选择不会被记录)。
【问题讨论】:
-
这个问题用example code会好很多。如果您将其发布在jsfiddle 或stack snippet,我们可以立即看到您使用的代码,并从那里开始。
-
@phihag 你好,我已经添加了负责获取用户选择范围的代码
-
请创建一个工作代码示例来显示您所面临的问题。我确定您的代码示例中上面的
unction()需要工作,我只是不想挖掘错别字... -
@caramba 我添加了 jsfiddle 链接
标签: javascript range selection