如何将光标移动到ContentEditable Span的开始/结束
How to move cursor to beginning/end of ContentEditable Span
我看到过其他类似的问题,但有点不清楚正确的方法是什么。我的假设是将光标移动到ContentEditable的前面,只需将焦点放在元素上。要将光标移到后面,需要某种polyfil解决方案。
Fiddle:http://jsfiddle.net/ys04jkth/
我fiddle的预期功能是将光标移动到一个文本框中,该文本框中间包含一个"记号"(div)。当焦点放在记号上时,用户可以删除它,也可以继续使用箭头键向左或向右移动。在询问如何移动到ContentEditable末尾的其他问题中,常见的解决方案之一是下面的函数,当用户专注于令牌并单击左箭头键时,我会尝试使用它:
function placeCaretAtEnd(el) {
el.focus();
if (typeof window.getSelection != "undefined"
&& typeof document.createRange != "undefined") {
var range = document.createRange();
range.selectNodeContents(el);
range.collapse(false);
var sel = window.getSelection();
sel.removeAllRanges();
sel.addRange(range);
} else if (typeof document.body.createTextRange != "undefined") {
var textRange = document.body.createTextRange();
textRange.moveToElementText(el);
textRange.collapse(false);
textRange.select();
}
}
当用户专注于令牌并按下向右箭头键时,我会尝试将注意力集中在下一个跨度上,假设它会将光标集中在前面。我看到了奇怪的行为,在这两种情况下,第一个字母都被跳过了。对为什么会发生这种情况有什么见解吗?
谢谢。
在您的keydown函数中,当您到达下一个(或上一个)元素的末尾(或开头)时,您可以更改它的事件目标。
你改变目标后发生了什么?keydown默认行为。所以,如果你输入右箭头,你到达终点,你改变了目标。。。并且您的光标向右移动,因为这是默认行为。
解决方案是什么?可以使用return false
阻止默认行为。因此,在您的keydown事件中,右箭头的代码应该是这样的:
if (event.keyCode == 39) { //Right arrow
var nextSpan = selectedToken.next();
if (nextSpan.length) {
nextSpan.focus();
selectedToken.removeClass('selectedToken');
}
return false;
}
这是你最新的小提琴。
相关文章:
- 使用Clipboard.js复制span文本
- 如何添加类,同时开始在文本字段中输入文本
- 希望日期开始结束于while循环中的一个房间id的一个数组
- 将<span样式>凯迪托
- 兰吉 |如何在 span 标签上使用单击事件删除突出显示的文本
- ng模型内的ng重复的ng重复开始
- 在HTML/JavaScript中,有没有一种方法可以在图像开始加载时知道图像的最终布局尺寸
- 当DIV中的文本高亮显示时,如何获得DIV中Span的值?(Javascript)
- Yii2从点击链接开始加载模式
- Jquery幻灯片以一行左侧的图像开始,但我希望它从右端开始
- 使用Javascript从整个网页中删除具有特定类的所有span标记
- 从REST服务器和Coffeescapet前端开始
- Javascript/jQuery:用HTML span标记替换单引号中的文本
- nodejs createReadStream从第n行开始
- 处理第三方库发送的ajax请求的开始和结束事件
- 从头开始创建XLS文件
- 在开始时隐藏FX.slide内容,而不是在单击后隐藏
- 使用Javascript更改Nested Span类
- 如何将光标移动到ContentEditable Span的开始/结束
- 在span标签中换行文本,知道文本的开始和结束位置