Скачет курсор при срабатывании скрипта

109
15 июня 2019, 07:10

Не могу разобраться почему при вставке кавычек в середине текста, курсор уходит в конец текста, как это исправить?

function replaceQuotes(input) { 
    input.value = changeQuotes(input.value); 
} 
 
function changeQuotes(text) { 
    var el = document.createElement("textarea"); 
    el.innerHTML = text; 
    for (var i = 0, l = el.childNodes.length; i < l; i++) { 
        if (el.childNodes[i].hasChildNodes() && el.childNodes.length > 1) { 
            el.childNodes[i].textContent = changeQuotes(el.childNodes[i].textContent); 
        } 
        else { 
            el.childNodes[i].textContent = el.childNodes[i].textContent.replace(/\x27/g, '\x22').replace(/(\w)\x22(\w)/g, '$1\x27$2').replace(/(^)\x22(\s)/g, '$1»$2').replace(/(^|\s|\()"/g, "$1«").replace(/"(\;|\!|\?|\:|\.|\,|$|\)|\s)/g, "»$1"); 
        } 
    } 
    return el.textContent; 
}
textarea{ 
  width: 80%; 
}
<p> 
Пример текста: </br> 
"текст" </br> 
если этому тексту добавить кавычки</br> 
"то курсор переместиться в конец этого текста"</br> 
</p> 
 
<textarea onkeyup="replaceQuotes(this)" rows="5" ></textarea>

Answer 1

function replaceQuotes(textarea){ 
  let text = textarea.value; 
  let index = text.search(/[\"]/); 
   
  textarea.value = text.replace(/\x27/g, '\x22').replace(/(\w)\x22(\w)/g, '$1\x27$2').replace(/(^)\x22(\s)/g, '$1»$2').replace(/(^|\s|\()"/g, "$1«").replace(/"(\;|\!|\?|\:|\.|\,|$|\)|\s)/g, "»$1"); 
  if(index !== -1){ 
    textarea.selectionStart = textarea.selectionEnd = index + 1; //устанавливаем курсор на место где была кавычка 
  } 
}
<textarea onkeyup="replaceQuotes(this)" rows="5" ></textarea>

READ ALSO
Создание скриптов Mysql в Init.d на Linux

Создание скриптов Mysql в Init.d на Linux

Потребовалось установить mysql 80 на Linux(Debian)

116
Почему mysql запрос отдает None?

Почему mysql запрос отдает None?

В бд ничего не записывается Но вывод данных из бд работает, в чем беда?

135
Валидатор формы ООП

Валидатор формы ООП

Здравствуйте помогите пожалуйста нужно сделать валидатор на ООП для формы он должен содержать: ФИО - текст, начинается с большой буквыАдрес-...

133
Изменение высоты дочернего элемента

Изменение высоты дочернего элемента

Нужно сделать, чтоб высота дочернего элемента не наследовалась родителемС position: absolute не получается

121