JavascriptroundContents при выделении не работает должным образом, если используется на части уже выбранного элемента - PullRequest
2 голосов
/ 09 июня 2011

Я бы хотел выделить текст, выбранный пользователем, и скопировать его в текстовое поле.

Последняя часть прекрасно работает. Но выделение выделенного текста завершается неудачей, если я пытаюсь выделить часть уже выделенного текста.

Вот вам JSFiddle Попробуйте выделить текст в правом окне, а затем попытаться выделить часть предыдущего выбора.

Есть идеи?

Соответствующий код:

function highlightSelected() {
var selection = getSelected();
var range = selection.getRangeAt(0);
var newNode = document.createElement("span");
$(newNode).addClass('mark');
range.surroundContents(newNode);
return range;
}

Спасибо !!

1 Ответ

3 голосов
/ 09 июня 2011

surroundContents() может работать только в том случае, если окружение всего диапазона в пределах одного элемента приводит к допустимому HTML (это определение довольно свободно: см. в спецификации для правильного определения). Например, следующий диапазон (обозначенный трубами) может быть заключен в surroundContents():

<p>fo|o<i>bar</i>ba|z</p>

... пока следующее не может:

<p>fo|o<i>ba|r</i>baz</p>

Выбор ваших вариантов зависит от того, чего именно вы пытаетесь достичь. Если вы просто пытаетесь изменить цвет фона выделения, вы можете использовать document.execCommand() для этого . Если вам необходимо добавить класс ко всему содержимому выделения, вам потребуется нечто более сложное, например, модуль применения класса из моей библиотеки Rangy .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...