Я пытаюсь написать редактор разметки на основе JavaScript (WYSIWIG), используя выделение и объект диапазона. У меня пока нет проблем с доступом к этим объектам.
Мои проблемы начинаются здесь:
Используя объект диапазона, я могу получить доступ к его свойствам startContainer/StartOffset и EndContainer/Endoffset. Это означает, что я возвращаю информацию об узле, с которого начинается мой выбор, включая внутреннюю позицию и ту же информацию о конце выбора.
Насколько я понял, JavaScript автоматически добавляет начальные или конечные теги в случае, если мой выбор нарушает существующие древовидные структуры.
Если я хочу добавить разметку сейчас, как мне справиться с этими сломанными структурами?
Пример:
This <i>is my</i><b>sample</b> text.
Теперь я хотел бы подчеркнуть часть «мой образец».
Это означает, что что-то вроде этого должно быть построено из выбора «моего образца»:
This <i>is <u>my</u></i><b><u>sample</u></b> text.
Но поскольку я не замечаю нарушения существующей древовидной структуры, как я могу это сделать? Как я могу убедиться, что разметка действительна?
Я также думал об обработке всей строки, но я не знаю о глобальных позициях букв/текста, а только об их положении в определенных узлах.
Я надеюсь, что этот вопрос ясен, и я извиняюсь за его общую форму. Но я действительно схожу с ума по этому делу...