Я использую Iris Colourpicker (http://automattic.github.io/Iris/) в моем богатый редактор HTML, позволяющий пользователям обновлять цвет текста в содержательном абзаце.
Проблема в том, что после вызова первого события «изменение» я теряю выделение, и, следовательно, никакие последующие изменения цвета не применяются.
Я попытался использовать замечательную Rangy библиотеку Тима Дауна, чтобы сохранить выделение и восстановить его, когда событие изменения уволен. Это работает в первый раз, когда событие вызывается, но каждый раз после этого не работает.
У меня есть эта функция, чтобы сохранить выбор до открытия палитры цветов
// Saves current selection. Colour picker widget is displayed after this is called.
jQuery(".tve_save_selection").on("mousedown", function(e) {
window.textselection = rangy.saveSelection();
});
И вот как инициализируется палитра цветов Iris:
var text_colourpicker_options = {
change: function (event, ui) {
color = ui.color.toString();
rangy.restoreSelection(window.textselection);
var sel = rangy.getSelection();
if (sel.toString().length) {
document.execCommand('ForeColor', false, color);
}
},
hide: true,
palettes: window.tve_custom_colours,
};
Похоже, что для палитры цветов нет события «закрытия», поэтому я не могу применить execCommand после того, как пользователь выбрал цвет.
Я думаю, что мне может потребоваться сгенерировать новый диапазон после срабатывания функции document.execCommand (), но поскольку DOM изменился, я не знаю, как определить новый диапазон выбора.
Любая помощь по этому поводу будет очень признательна!