Я искал идеальный ответ.Но не нашел ни одного из них.Наконец прошел основы.
Вот как я это сделал.
HTML:
<div id="editor" contenteditable="true">Lorem Ipsum is simply dummy text</div>
<button id="make-bold">Make bold</button>
JS:
document.getElementById('make-bold').addEventListener('click', function(event){
event.preventDefault();
var selection = window.getSelection();
var range = selection.getRangeAt(0).cloneRange();
var tag = document.createElement('strong');
range.surroundContents(tag);
selection.addRange(range);
});
Демонстрация в реальном времени - https://jsfiddle.net/im4aLL/Lyusxq3p/
Я вытащил основную идею и наконец сделалто, что я использую в своих будущих проектах.
Я сделал EasyEditor - https://github.com/im4aLL/easyeditor из концепции выше.Есть еще много дел.Например, когда вы оборачиваете узел, вы должны проверить, что выбор уже обернут другим узлом или тем же узлом.Также есть множество функций, которые вам нужно преодолеть.
Или вы можете попробовать мой легкий плагин, который я сделал для парней вроде вас, которым нужно полностью гибкое решение для интеграции его с другим приложением.
Вотдемоверсия и документация по использованию EasyEditor
Использование
http://habibhadi.com/lab/easyeditor/default-example.html