В браузерах webkit (это не является проблемой в IE9 или Mozilla), когда кто-то запрашивает диапазон для clientRects (getClientRects), возвращаемые clientrects содержат прямоугольники текста, которые соответствуют выделенному тексту, но также и клиентские начала любого элемента в пределах диапазона. Как я могу определить, какие clientrects принадлежат элементам.
Например, предположим, что этот пункт был отображен с теми же разрывами строк, что и здесь:
<p>This is some text StartSelection in a paragraph
blah blah<span>this is some EndOfSelection blah
more text</span>
</p>
Если я выбрал из StartSelection для EndOfSelection, а затем запросил диапазон от выбора - getRangeAt (0)
Я бы вернул этот массив clientRects:
0. rect of 'StartSelection in a paragraph'
1. rect of 'blah blah'
2. rect of 'this is some EndOfSelection blah'
3. rect of 'more text'
4. rect of 'this is some EndOfSelection'
Единственные необходимые мне ректы - это 0, 1 и 4. Ректы 2 и 3 представляют содержимое начального тега элементов, которые пересекает выбор.
Геометрический осмотр ректов позволил бы мне отказаться от 2 и 3, но код показался мне немного хрупким, особенно если мой выбор расширился до третьей строки. Есть ли какой-либо способ определить источник ректов без геометрического осмотра, который я могу использовать, чтобы отбросить 2 и 3?