【发布时间】:2012-06-02 10:41:32
【问题描述】:
我希望将插入符号正好移动到其当前位置之前的四个空格,以便我可以正确插入一个制表符。我已经在插入符号的位置插入了 HTML,但是当我插入 HTML 时,插入符号被留下了。在过去的一个小时左右,我一直在寻找各种方法来做到这一点,并且我已经尝试了很多方法,但我无法让它们中的任何一个为我工作。这是我尝试过的最新方法:
function moveCaret(input, distance) {
if(input.setSelectionRange) {
input.focus();
input.setSelectionRange(distance, distance);
} else if(input.createTextRange) {
var range = input.createTextRange();
range.collapse(true);
range.moveEnd(distance);
range.moveStart(distance);
range.select();
}
}
它什么都不做——不移动插入符号,不抛出任何错误或任何东西。这让我很困惑。是的,我知道上面的方法 set (应该)将插入符号设置在指定节点开头的某个位置(即input),但即使这样也不起作用。那么,我到底做错了什么,我该如何做对呢?
编辑:基于 o.v. 的链接。提供,我已经设法拼凑出一些东西,最终做了一些事情:抛出一个错误。耶!这是新代码:
this.moveCaret = function(distance) {
if(that.win.getSelection) {
var range = that.win.getSelection().getRangeAt(0);
range.setStart(range.startOffset + distance);
} else if (that.win.document.selection) {
var range = that.win.document.selection.createRange();
range.setStart(range.startOffset + distance);
}
}
现在,这给出了错误Uncaught Error: NOT_FOUND_ERR: DOM Exception 8。任何想法为什么?
【问题讨论】:
-
您是否尝试设置
element.selectionStart和element.selectionEnd?据我所知,它应该可以跨浏览器进行输入和文本区域。 -
我避免使用它,因为我相信它在早期版本的 IE8 中不起作用。不过我还是会看看的。
-
我测试的唯一 IE 版本是 IE9,不过祝你好运。 :)
-
是的,
selectionStart在早期版本的 IE 中似乎不起作用,但无论如何感谢。 =) -
可能重复:stackoverflow.com/questions/1181700/… This 和 this 答案似乎得到了很多认可。
标签: javascript contenteditable caret