Я хочу переместить курсор ровно на четыре пробела вперед от его текущей позиции, чтобы правильно вставить табуляцию. У меня уже работает вставка 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();
}
}
Он абсолютно ничего не делает — не перемещает каретку, не выдает никаких ошибок или чего-то еще. Это ставит меня в тупик.И да, я знаю, что указанный выше метод устанавливает (должен) устанавливать курсор в определенной позиции от начала указанного узла (то есть 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
. Есть идеи почему?