window.getSelection()
дает вам объект Selection . Используйте selection.rangeCount
и selection.getRangeAt()
, чтобы получить объект Range , представляющий, какой выбор вы хотите.
Теперь вы можете получить первый и последний узлы в выборе из range.startContainer
/ startOffset
и range.endContainer
/ endOffset
. Затем вы можете пройти вверх и вниз по дереву, чтобы подобрать все элементы между этими двумя позициями, например. используя функцию getElementsBetweenTree()
из этого ответа .
К сожалению, модель IE TextRange полностью отличается от стандартов W3 и HTML5 и в целом гораздо хуже. Он не так легко отдает начальную и конечную позиции, и не надежным способом. Все, что вы получаете, это parentElement
, чтобы сказать вам общего предка, и оттуда вы ограничены в угадывании, где диапазон основан на создании нового диапазона и вызове moveToElementText
для него, затем compareEndPoints
с диапазоном выбора. И если вам нужно знать точный выбор текста, то вы угадываете на основе moveStart
/ moveEnd
с учетом диапазона и сравнения, что совсем не весело.