Я работаю над специализированным редактором Text/HTML с Javascript и JQuery в contenteditable div. Я реализовал различные стили текста (жирный, курсив,...) с помощью execcommand. Кажется, это работает, только если выделенный текст не пуст. Каков наилучший способ решить эту проблему?
Вот пример того, что я хочу сделать с Text, являющимся текстом в редакторе, HTML, являющимся соответствующим HTML-кодом, и | будучи курсором Позиция:
Text: Hello| World
HTML: <b>Hello| World</b>
Нажав «жирную» кнопку, команда execcommand('bold') должна быть выполнена в выбранной позиции, а курсор должен быть помещен внутри измененной позиции.
Text: Hello| World
HTML: <b>Hello</b>|</b> World</b>
Это не работает. Я нашел обходной путь, добавив текстовый узел, содержащий пробел. Кажется, это работает в Internet Explorer, но не в Firefox. Вот простой пример:
HTML:
<div id="textcontent" contenteditable="true" overflow:auto;"><p>Enter text</p></div>
<button type="button" id="setBold">Bold</button>
Javascript:
$('#setBold').click(function () {
if (document.getSelection() != "") {
document.execCommand('bold');
}
else {
var selObj = document.getSelection();
var selRange = selObj.getRangeAt(0);
var newNode = document.createTextNode(' ');
selRange.deleteContents();
selRange.insertNode(newNode);
selObj.removeAllRanges();
selObj.addRange(selRange);
document.execCommand('bold');
selRange.deleteContents();
selObj.removeAllRanges();
selObj.addRange(selRange);
}
});
И соответствующий jsfiddle здесь: http://jsfiddle.net/andibioticum/3V7pK/