我已经看到了类似这样的其他问题,但它有点不清楚正确的做法是什么。我的假设是将光标移动到ContentEditable的前面,您只需将焦点放在元素上。将光标移到后面需要某种polyfil解决方案。如何将光标移动到ContentEditable Span的开始/结尾
小提琴:http://jsfiddle.net/ys04jkth/
在我的小提琴预期功能是将整个文本框光标包含“令牌”(格)在它的中间。当焦点集中在令牌上时,用户可以将其删除,或者使用箭头键继续向左或向右移动。关于如何移动到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();
}
}
当用户将注意力集中在令牌上并且他们按下了右箭头键时,我试着将焦点放在下一个跨度上,假定它将光标聚焦在前面。我看到奇怪的行为,在这两种情况下,第一个字母被跳过。深入了解为什么会发生这种情况?
谢谢。
谢谢!我甚至不认为默认行为会继续如此。 – thomasdclark