Нецелые высоты DOMElement - PullRequest
2 голосов
/ 29 марта 2011

У меня есть таблица со строками, и мне нужно вычислить высоту любой строки.

var height = $('table').find('tbody > tr').height();
console.log(height);

В моем конкретном случае это дает 18. Итак, я использую это для вычисления индекса внутри прокручиваемого div. Это index = scrollTop / rowHeight, но что-то не так.

После дальнейшего расследования я обнаружил, что сообщаемая высота, в данном случае IE9, на самом деле равна 18.4. Используя это значение, расчет работает.

Чего я не могу понять, так это как получить это значение. Все методы, которые я пробовал использовать jQuery, innerHeight, outerHeight (включая и без полей) и height. Все они возвращают 18 целое число !? Высота таблицы над числом строк является приемлемым приближением (18.40625), но это значение вызывает незначительные ошибки округления. Я пробовал round, floor и ceil безрезультатно.

Единственный способ, которым мне до сих пор удавалось заставить это работать, состоял в том, чтобы установить высоту каждой строки к некоторому целочисленному значению. Но я действительно хотел покончить с этим, и я должен иметь возможность вычислять высоту строки, чтобы она могла принимать любое значение, если оно постоянное.

Это 18.4 - это вычисленное line-height, и его преобразование в целое число устраняет проблему, но я не хочу иметь дело с пикселями устройства. Я не понимаю, почему нет способа получить фактическое значение высоты, как показано инструментами разработчика (согласно документации MSDN это offsetHeight, но это свойство является целым числом, что просто неверно).

Мне нужна помощь.

1 Ответ

2 голосов
/ 21 октября 2011

Это больно, но я считаю, что вы должны быть в состоянии достичь высоты с помощью вызова window.getComputedStyle (elem, null). Если вы не используете IE9 в стандартном режиме, вам нужно вместо этого перейти в проприетарное свойство IE elem.currentStyle (другие браузеры, естественно, используют стандартный вызов). Помните, что вам нужно добавить отступы и ширину границы элемента к значению style.height, и вам нужно будет выполнить parseFloat для значения, так как оно вернется с «px» в конце.

...