hКак получить позицию каретки для contentEditable div?

Я делаю текстовый редактор для своего блога. Я хочу предоставить пользователям небольшой набор инструментов, где они могли бы редактировать свои сообщения в блоге, выбирая текст и применяя некоторые стили, например выделяя выделенный текст полужирным шрифтом или курсивом или окрашивая выделенный текст в какой-либо цвет. Также варианты для вставки изображений и ссылок на видео.

Я искал переполнение стека, но не смог найти удовлетворительного решения.

Было бы здорово, если бы кто-нибудь помог мне найти позицию каретки для выбора (или без выбора). Я попробовал плагин jQuery Caret, но он не работает.

Мой код выглядит так (пришел к этому чтению сообщения только о переполнении стека):

HTML:

<div id="editor" contentEditable="true">
     Initial text...
</div>

В отдельном JS-файле:

(function(){
$("#editor").bind("keydown keypress mousemove", function() {
        alert("Current position: " + $(this).caret().start);
    });
}());

Я получаю следующую ошибку в Firebug, когда страница загружается и ничего не происходит при нажатии клавиши или любом другом событии:

В нем говорится:

f.value не определено

Я также попробовал эту ссылку

но представленное здесь решение не будет работать, если внутри исходного div есть какой-либо другой тег.

Пожалуйста, помогите. Кроме того, если у вас есть лучшие возможные решения или совершенно другой подход, помогите мне.


person sri_wb    schedule 02.05.2012    source источник
comment
Что вы хотите делать, когда у вас есть эта позиция каретки?   -  person Tim Down    schedule 02.05.2012
comment
Я оберну текст внутри выделения несколькими тегами и сразу же предоставлю пользователю предварительный просмотр. Я не могу делать то, что делает ТАК, публикуя вопрос, предоставляя предварительный просмотр в отдельном контейнере. Блоги могут быть длинными много раз.   -  person sri_wb    schedule 02.05.2012
comment
ой!! это предупреждение было просто для проверки того, все ли в порядке с его значением... я обычно сохраняю значение и манипулирую им, используя отдельные функции.   -  person sri_wb    schedule 02.05.2012


Ответы (1)


Плагин каретки jQuery (я полагаю, вы имеете в виду этот) предназначен только для текста вводы и текстовые поля. Элементы Contenteditable работают совсем по-другому, поэтому они и не работают.

Если вам нужна позиция каретки или выбор с точки зрения смещения символов, мой ответ здесь может помочь, хотя обычно для того, что это звучит как вы пытаетесь сделать, эти цифры не будут очень полезны. Мне кажется, что вам нужно посмотреть на document.execCommand().

person Tim Down    schedule 02.05.2012
comment
да, я использовал только его (плагин jQuery Caret). о, кажется, я получил именно то, что хотел (document.execCommand()). Спасибо. Я реализую этот метод и поделюсь своими результатами и выводами здесь. - person sri_wb; 02.05.2012