Если вам не нужна поддержка IE8 или старше, вы можете использовать Range
для select the text node, а затем получить ограничивающий прямоугольник непосредственно из Range
.
Пример (должен работать на этой странице):
var text = document.getElementById('nav-questions').childNodes[0];
var range = document.createRange();
range.selectNode(text);
var rect = range.getBoundingClientRect();
range.detach(); // frees up memory in older browsers
Вы также можете повторно использовать Range
объект, если вы делаете это для нескольких текстовых узлов; просто не забудьте позвонить range.detach()
, пока не закончите. (Примечание: Range.detach()
теперь не работает в the DOM standard, хотя старые браузеры по-прежнему будут отключать использование диапазона после его вызова.)
Чтобы проверить, будет ли это работать в вашем навигаторе: 'document.implementation.hasFeature ('Range ',' 2.0 '); ' – Noyo