我需要一个div的全高度,我目前正在使用
document.getElementById('measureTool').offsetHeight
offsetHeight
-返回元素的高度,包括边框和填充(如果有),但不包括边距
但是div中的一个嵌套元素的边缘顶部
为20%
,所以我得到了一个错误的度量。我尝试了style.边缘化顶部
和scrollHeight
没有成功。
如何在javascript中获取元素(div)的完整高度(边框、填充、边距)?
如果没有其他方法,我可以使用jQuery。
像这样的东西(没有jquery)怎么样?它类似于@gdoron的答案,但稍微简单一点。在IE9、Firefox和Chrome中进行了测试。
function getAbsoluteHeight(el) {
// Get the DOM Node if you pass in a string
el = (typeof el === 'string') ? document.querySelector(el) : el;
var styles = window.getComputedStyle(el);
var margin = parseFloat(styles['marginTop']) +
parseFloat(styles['marginBottom']);
return Math.ceil(el.offsetHeight + margin);
}
这是一个工作jsfiddle。
如果你可以使用jQuery:
$('#divId').outerHeight(true) // gives with margins.
jQuery文档
对于vanilla javascript,您需要编写更多内容(像往常一样…):
function Dimension(elmID) {
var elmHeight, elmMargin, elm = document.getElementById(elmID);
if(document.all) {// IE
elmHeight = elm.currentStyle.height;
elmMargin = parseInt(elm.currentStyle.marginTop, 10) + parseInt(elm.currentStyle.marginBottom, 10) + "px";
} else {// Mozilla
elmHeight = document.defaultView.getComputedStyle(elm, '').getPropertyValue('height');
elmMargin = parseInt(document.defaultView.getComputedStyle(elm, '').getPropertyValue('margin-top')) + parseInt(document.defaultView.getComputedStyle(elm, '').getPropertyValue('margin-bottom')) + "px";
}
return (elmHeight+elmMargin);
}
住DEMO
代码源
var el = document.querySelector('div');
var elHeight = el.offsetHeight;
elHeight += parseInt(window.getComputedStyle(el).getPropertyValue('margin-top'));
elHeight += parseInt(window.getComputedStyle(el).getPropertyValue('margin-bottom'));
console.log(elHeight);
https://jsfiddle.net/gbd47ox1/
我认为这个解决方案更具可读性,但所提出的解决方案都没有考虑到不是像素的大小…:(