Я забыл о кросс-браузерной совместимости на данный момент, я просто хочу, чтобы это работало.
Я пытаюсь изменить скрипт (и вам, вероятно, не нужно это знать), расположенный по адресу typegreek.com Базовый скрипт находится здесь . По сути, когда вы печатаете символы, он преобразует вводимый вами символ в греческие символы и выводит его на экран. То, что я пытаюсь сделать, это заставить его работать с содержимым divEditable (он работает только для Textareas)
Моя проблема связана с этой единственной функцией: пользователь вводит ключ, он преобразуется в греческий ключ и переходит к функции, он сортируется через некоторые if, и где он заканчивается, где я могу добавить поддержку div , Вот что у меня так,
myField - это div, myValue - греческий символ.
//Get selection object...
var userSelection
if (window.getSelection) {userSelection = window.getSelection();}
else if (document.selection) {userSelection = document.selection.createRange();}
//Now get the cursor position information...
var startPos = userSelection.anchorOffset;
var endPos = userSelection.focusOffset;
var cursorPos = endPos;
//Needed later when reinserting the cursor...
var rangeObj = userSelection.getRangeAt(0)
var container = rangeObj.startContainer
//Now take the content from pos 0 -> cursor, add in myValue, then insert everything after myValue to the end of the line.
myField.textContent = myField.textContent.substring(0, startPos) + myValue + myField.textContent.substring(endPos, myField.textContent.length);
//Now the issue is, this updates the string, and returns the cursor to the beginning of the div.
//so that at the next keypress, the character is inserted into the beginning of the div.
//So we need to reinsert the cursor where it was.
//Re-evaluate the cursor position, taking into account the added character.
var cursorPos = endPos + myValue.length;
//Set the caracter position.
rangeObj.setStart(container,cursorPos)
Теперь это работает только до тех пор, пока я не наберу больше, чем размер исходного текста. Скажем, у меня было 30 символов в div перед раздачей. Если я наберу больше 30, это добавляет символ 31, но курсор возвращается на 30. Я могу ввести символ 32 в поз.31, затем символ 33 в поз.32, но если я попытаюсь вставить символ 34, он добавляет символ и устанавливает курсор обратно на 32. Проблема заключается в том, что функция добавления нового символа облажается, если cursorPos больше, чем определено в диапазоне. Есть идеи?