Получение набранного слова в contentEditable Div из позиции курсора - PullRequest
1 голос
/ 28 июля 2011

Я непрерывно читал о попытках сделать это и нашел много близких ответов, но без сигары.Вот мой сценарий:

Я пытаюсь написать плагин jQuery, который будет работать как редактор intellisense для моих пользователей с ключевыми словами и типами данных и возможными методами.Это будет выглядеть как codeComplete в IDE.

Мне нужно получить частичное слово, которое вводится, чтобы выполнить поиск в моем массиве ключевых слов и найти соответствия для заполнения в раскрывающемся списке.Все работало довольно хорошо, пока я не нашел несколько ошибок.

У меня есть DIV contentEditable и мне нужно получить позицию курсора.У меня есть некоторый код, который был любезно предоставлен в одном из предыдущих ответов, о которых я говорил:

function getCursorPos() {
var cursorPos = 0;
if (window.getSelection) {
    var selObj = window.getSelection();
    var selRange = selObj.getRangeAt(0);
    cursorPos = findNode(selObj.anchorNode.parentNode.childNodes, selObj.anchorNode) + selObj.anchorOffset; /* FIXME the following works wrong in Opera when the document is longer than 32767 chars */
    //alert(cursorPos);
}
else if (document.selection) {
    var range = document.selection.createRange();
    var bookmark = range.getBookmark(); /* FIXME the following works wrong when the document is longer than 65535 chars */
    cursorPos = bookmark.charCodeAt(2) - 11; /* Undocumented function [3] */
    //alert(cursorPos);
}
return cursorPos; }

function findNode(list, node) {
for (var i = 0; i < list.length; i++) {
    if (list[i] == node) {
        return i;
    }
}
return -1; }

Проблема, которую я вижу, состоит в том, что диапазон + смещение работают приблизительно для 7-8 символов, а затем пробелов и других символов.кажется, что курсор останавливает "прогрессирование", а затем вся моя функция getWord () сбрасывается.

Кто-нибудь может пролить свет на это для меня?Может быть, я не использую код, который помогает в моей конкретной ситуации.Я провел дни, пытаясь понять объекты Range и selectionRange, и это сводит меня с ума.:)

...