Семантика clientRect из getClientRects в браузерах webkit - PullRequest
4 голосов
/ 29 августа 2011

В браузерах 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?

1 Ответ

0 голосов
/ 29 августа 2011

Не настолько, насколько я знаю.Эта функция Range является относительно новой во всех браузерах, я очень мало писал об этом, поэтому я предполагаю, что она не используется широко, и вполне могут быть ошибки браузера.Это, например, похоже на ошибку WebKit, поскольку при быстром чтении мне кажется, что она нарушает часть спецификации CSSOM View, относящейся к диапазонам .

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