Прямо сейчас я собираю текстовые выделения пользователей через s = window.getSelection()
и range = s.getRangeAt(0)
( в браузере означает ). Всякий раз, когда делается выбор в пределах a <p>
, я могу легко позвонить range.surroundContents(document.createElement("em"))
, чтобы выделить выделенный текст , обернутый с тегом <em>
.
В этом примере, однако,
<p>This is the Foo paragraph.</p>
<p>This is the Bar paragraph.</p>
<p>This is the Baz paragraph.</p>
когда пользователь делает выбор текста от Foo
до Baz
, я не могу вызвать range.surroundContents
: Firefox завершается неудачно с The boundary-points of a range does not meet specific requirements." code: "1
, потому что выбор не является допустимым HTML.
В этом случае я бы хотел как-то получить следующее состояние в DOM:
<p>This is the <em>Foo paragraph.</em></p>
<p><em>This is the Bar paragraph.</em></p>
<p><em>This is the Baz</em> paragraph.</p>
Есть идеи?
К вашему сведению: я пытался использовать Range
API, но я не вижу простого способа достижения этого результата. С
var r = document.createRange();
r.setStart(range.startContainer, range.startOffset);
r.setEnd(range.endContainer, range.endOffset+40);
selection.addRange(r);
Я могу со временем взломать что-либо, переместив смещения, но только для контейнеров 'start' и 'end'! (т.е. в этом случае параграф Bar
, как мне обернуть его?)