Я хочу окружить кучу блочных тегов (p, div) своим тегом span на основе выбора пользователя, и мне интересно, как это сделать? Я просмотрел функции range.insertNode() и range.surroundNode(), но нет возможности передать ему несколько узлов для окружения.JavaScript - Как окружить теги блоков тегом span?
Моя текущая реализация выглядит следующим образом:
var selection = window.getSelection();
var range = selection.getRangeAt(0);
var $startSpan = $("<span class=\"SelectSpan\"/>");
range.insertNode($startSpan[0]);
range.surroundContents($startSpan[0]);
Это работает, если выделение содержит только один узел (т.е. пользователь выбирает только часть абзаца), но перерывы, если выбор пользователя проходит через многократный P-х или Divs (среди прочих тегов, я уверен).
В качестве примера рассмотрим следующую DOM структуру:
<div>
<p>Hello there Mary</p>
<p>Hello there Jake</p>
</div>
Я хотел бы, чтобы в конечном итоге с чем-то вроде следующего, если пользователю выбрать части из обоих пунктов (Предположим, что пользователь выбирает «там Мэри Привет »):
<div>
<p>Hello <span>there Mary</span></p>
<p><span>Hello there</span> Jake</p>
</div>
Подождите, вы используете jQuery? – Blender
Вы, кажется, используете jQuery, хотя вы не отметили вопрос как таковой, поэтому вы можете посмотреть http://api.jquery.com/wrapAll/ – nnnnnn
wrapAll точно не решает проблему как пользователь может выбрать только часть абзаца/предложения, а не обязательно весь узел. – Jon