У меня есть contenteditable элемент, который я обновляю / фильтрую с помощью javascript. После обновления текстового содержимого каретка всегда возвращается к началу. Хочется заставить работать как элемент ввода.
Я настроил демо :
- test1 - contenteditable element
- test2 - элемент ввода
В этом примере у меня есть функция, которая позволяет вставлять только цифры, если вы вставляете другие символы, ничего не будет отображаться.
После ввода некоторых чисел в contenteditable и вставки номера NOT, курсор (каретка) переходит в начало. В случае элемента ввода курсор уходит в конец.
Как этого добиться, чтобы курсор остался на том месте, где он был?
(чистый JavaScript)
function onlyNumber(element) {
const invalidChars = /\D/g;
ob = element.target;
if (element.target.nodeName == "INPUT") {
if (invalidChars.test(ob.value)) {
ob.value = ob.value.replace(invalidChars, "");
}
} else if (element.target.nodeName == "TD") {
if (invalidChars.test(ob.textContent)) {
ob.textContent = ob.textContent.replace(invalidChars, "");
}
}
}
document.getElementById("test1").addEventListener("input", function(event) {
onlyNumber(event);
})
document.getElementById("test2").addEventListener("input", function(event) {
onlyNumber(event);
})
#test1 {
border: 1px solid gray;
padding: 5px;
width: 100px;
}
#test2 {
margin-top: 15px;
}
<table class="table">
<tbody>
<tr>
<td id="test1" contenteditable="true"></td>
</tr>
</tbody>
</table>
<input id="test2" />