Вы должны эффективно написать свой собственный сериализатор HTML.
Начните с selectionRange.startContainer
/ startOffset
и двигайтесь по дереву оттуда до тех пор, пока не доберетесь до endContainer
/ endOffset
, выводя разметку HTML из узлов по мере продвижения, включая открытые теги и атрибуты при ходьбе в элемент и закрывайте теги, когда вы поднимаетесь на parentNode
.
Не очень весело, особенно если в какой-то момент вам придется поддерживать совершенно другую модель IE <9 Range ... </p>
(Обратите внимание, что вы не сможете получить полностью необработанный исходный HTML-код, поскольку эта информация пропала. Только текущее дерево DOM хранится в браузере, и это означает, что такие данные, как тег регистр, порядок атрибутов, пробелы и пропущенные неявные теги будут отличаться в зависимости от источника и того, что вы получите.)