Определите, какие элементы DOM содержит текущий выделенный текст - PullRequest
8 голосов
/ 27 марта 2010

Я хочу узнать, какие элементы DOM присутствуют в тексте, выбранном пользователем в браузере.

document.getSelection () получит нам выбранный текст. Но как мы можем определить, какие элементы DOM содержатся в этом выделении текста?

1 Ответ

7 голосов
/ 27 марта 2010

window.getSelection() дает вам объект Selection . Используйте selection.rangeCount и selection.getRangeAt(), чтобы получить объект Range , представляющий, какой выбор вы хотите.

Теперь вы можете получить первый и последний узлы в выборе из range.startContainer / startOffset и range.endContainer / endOffset. Затем вы можете пройти вверх и вниз по дереву, чтобы подобрать все элементы между этими двумя позициями, например. используя функцию getElementsBetweenTree() из этого ответа .

К сожалению, модель IE TextRange полностью отличается от стандартов W3 и HTML5 и в целом гораздо хуже. Он не так легко отдает начальную и конечную позиции, и не надежным способом. Все, что вы получаете, это parentElement, чтобы сказать вам общего предка, и оттуда вы ограничены в угадывании, где диапазон основан на создании нового диапазона и вызове moveToElementText для него, затем compareEndPoints с диапазоном выбора. И если вам нужно знать точный выбор текста, то вы угадываете на основе moveStart / moveEnd с учетом диапазона и сравнения, что совсем не весело.

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