TinyMCE - получать контент до позиции курсора

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

Мне нужно извлечь подмножество текста, заканчивающегося буквами непосредственно перед позицией курсора, и начинать с, ну, начало текста. Я могу лишить теги HTML самостоятельно, если это необходимо, но я предпочитаю разрешать tinyMCE делать это, если это возможно.

Я думал сделать это вот так:

  • Вставить закладку в текущую позицию курсора с помощью mceInsertContent
  • Создайте диапазон от начала текста до моей закладки.
  • Получить содержимое диапазона.
  • Удалить закладку.

Теперь, поскольку я не настолько хорошо разбираюсь в tinyMCE, что оказалось для меня немного сложной задачей, так как это можно сделать?

В коде должен работать кросс-браузер.

1 ответ

Вы можете попробовать этот фрагмент кода (ed - объект редактора tinymce)

а. Вставить закладку в текущую позицию курсора с помощью mceInsertContent

ed.execCommand('mceInsertContent', false,'<span>\ufeff</span>');

В. Создайте диапазон от начала текста до моей закладки.

var rng = ed.selection.getRng(1);
var rng2 = rng.cloneRange();
// set start of range to begin of forst paragraph
rng2.setStartBefore($(ed.getBody()).find('p:first').get(0));
rng2.setEndBefore($(ed.getBody()).find('span.marker').get(0));
ed.selection.setRng(rng2);

С. Получите содержимое диапазона.

// get content of selection (range)
var content = ed.selection.getContent({format: 'text'});

Д. Удалите закладку.

$(ed.getBody()).find('span.marker').remove();

Обновление: Если вас беспокоит изменение выбора, вы можете reset указать начальный диапазон

ed.selection.setRng(rng);

licensed under cc by-sa 3.0 with attribution.