2009-12-23 2 views
2

Я пытаюсь разрешить пользователю редактировать contenteditable div, но я обнаружил, что я не могу использовать pasteHTML, если не выбран какой-либо текст.IE JS: как использовать pasteHTML() при выборе.type == 'None'?

Я думал, что document.selection.createRange() вернет действительный выбор нулевой длины (т. Е. Позицию), но, увы, нет.

Я действительно пытался найти любое решение для этого, которое не включает iframes (а не вариант в настоящее время).

Любые предложения/идеи/вопросы приветствуются.

ответ

3

Убедитесь, что фокус находится на редактируемом DIV перед созданием TextRange от выбора:

var div = document.getElementById("your_div"); 
div.focus(); 
document.selection.createRange().pasteHTML("<b>PASTED</b>"); 
+0

Спасибо, уже все так! Видно это упоминалось несколько раз, но никогда не объяснялось, почему это имеет значение. – jezmck

+0

Вышеприведенный код работает для меня. Если он не работает для вас, вам понадобится опубликовать код, который вы используете. Что касается того, почему это имеет значение: если выбор пуст и фокус не находится на редактируемом элементе, IE, похоже, не считает его выбором для документа. Перемещение фокуса на элемент решает это. –

+0

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

0

Вы можете использовать форму textarea. Это простой и кросс-браузер, но не знаю, в какой степени ваш стиль ограничен или используется элемент формы или формы для вашей проблемы.

+0

К сожалению, это не вариант для меня, но спасибо. – jezmck