Przesuń pozycję kursora za pomocą Javascript?
Chcę przesunąć karetkę dokładnie o cztery spacje przed jej aktualną pozycją, aby poprawnie wstawić kartę. Mam już wstawioną wersję HTML w miejscu pracy karetki, ale kiedy wstawiam HTML, karetka pozostaje w tyle. Spędziłem mniej więcej godzinę, patrząc na różne sposoby, aby to zrobić, i próbowałem ich wiele, ale nie mogę zmusić żadnego z nich do pracy dla mnie. Oto najnowsza metoda, którą wypróbowałem:
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();
}
}
Nie robi nic - nie porusza karetki, nie rzuca żadnych błędów ani niczego. To mnie zdumiewa. I tak, wiem, że powyższy zestaw metod (ma za zadanie) ustawić kursor w określonej pozycji od początku określonego węzła (to znaczy,input
), ale nawet to nie działa. Więc co właściwie robię źle i jak mogę to zrobić dobrze?
Edytuj: Na podstawie linków, które o.v. pod warunkiem, że udało mi się połączyć coś, co w końcu coś robi: rzuca błąd. Tak! Oto nowy kod:
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);
}
}
To daje błądUncaught Error: NOT_FOUND_ERR: DOM Exception 8
. Jakieś pomysły dlaczego?