Странно заданный вопрос, но у меня есть решение уже вставить обычный текст в <span contentEditable="true">
с помощью скрытого textarea
, который, кажется, работает очень хорошо, за исключением того, что он нарушает функцию отмены браузера. С самого начала я не беспокоюсь о кросс-браузерном решении; Я только забочусь о Chrome. Мой подход выглядит примерно так:
$('.editable').live('paste', function()
{
var $this = $(this);
//more code here to remember caret position, etc
$('#clipboard').val('').focus(); //put the focus in the hidden textarea so that, when the paste actually occurs, it auto-sanitized by the textarea
setTimeout(function() //then this will be executed immediately after the paste actually occurs
{
$this.focus();
document.execCommand('insertHTML', true, $('#clipboard').val());
});
});
Итак, это работает - я могу вставить что угодно, и он сводится к простому тексту, прежде чем перейти в мое поле contentEditable
, но если я попытаюсь отменить после вставки:
- Первая отмена отменяет пасту.
- Вторая отмена отменяет изменения в
#clipboard
, отводя фокус от моегоcontentEditable
.
Я пробовал все, что мог, чтобы браузер не пытался отменить изменения #clipboard
- переключать display:none
, когда он не активно используется, переключая readonly
и disabled
состояние, уничтожая он в конце и воссоздает его в начале события выше, различные другие хаки - но ничего не работает.
Это ужасный подход к дезинфекции? Это первая вещь, с которой мне удалось действительно работать - попытка очистить разметку после того, как вставка не работает, так как есть некоторые вещи (целые HTML-документы), которые при вставке вызывают крах браузера, который Я бы хотел избежать.
Можно ли отключить #clipboard
или любые другие предложения о том, как это сделать?
Изменить
Мне удалось немного улучшить ситуацию, добавив строку
$('#clipboard').val('');
Сразу после строки execCommand
. Это, похоже, полностью нейтрализует отмену: карет больше не выходит из поля contentEditable
, но ничего не отменяется вообще. Немного улучшения, но я все еще ищу подходящее решение.