JavaScript和jQuery获取元素高度的各种方法

 更新时间:2026年05月15日 08:19:55   作者:detayun  
在前端开发中,获取元素高度是最基础也是最常用的操作之一,本文将详细介绍 原生JavaScript 和 jQuery 中获取元素高度的各种方法,帮你彻底搞懂它们的区别,需要的朋友可以参考下

一、原生JavaScript获取高度

1、offsetHeight 最常用

获取元素的可见高度,包括:

  • ✅ 内容高度(content)
  • ✅ 内边距(padding)
  • ✅ 边框(border)
  • ❌ 不包括外边距(margin)
const div = document.getElementById('myDiv');
const height = div.offsetHeight;

console.log(height); // 例如: 200px(数字类型,不带px)

2、clientHeight

获取元素的内部高度,包括:

  • ✅ 内容高度(content)
  • ✅ 内边距(padding)
  • ❌ 不包括边框(border)
  • ❌ 不包括外边距(margin)
const div = document.getElementById('myDiv');
const height = div.clientHeight;

console.log(height); // 例如: 198px(不含2px边框)

3、getBoundingClientRect().height

获取元素的精确高度(浮点数),包括:

  • ✅ 内容 + padding + border
  • ✅ 返回精确到小数点的值
const div = document.getElementById('myDiv');
const height = div.getBoundingClientRect().height;

console.log(height); // 例如: 198.5px(精确值)

4、scrollHeight

获取元素的完整内容高度,包括:

  • ✅ 内容高度(即使被隐藏/滚动)
  • ✅ 内边距(padding)
  • ❌ 不包括边框和外边距
const div = document.getElementById('myDiv');
const height = div.scrollHeight;

// 常用于判断内容是否溢出
if (div.scrollHeight > div.clientHeight) {
    console.log('内容溢出了!需要滚动');
}

二、jQuery获取高度

jQuery提供了更简洁的API,底层其实还是调用原生方法。

1、.height()最常用

var h = $('#myDiv').height();
console.log(h); // 200(数字类型)

等价于原生的 offsetHeight(不含margin)

2、.innerHeight()

var h = $('#myDiv').innerHeight();

等价于原生的 clientHeight(含padding,不含border)

3、.outerHeight()

var h = $('#myDiv').outerHeight();      // 含padding + border
var h = $('#myDiv').outerHeight(true);  // 含padding + border + margin

4、.css('height')

var h = $('#myDiv').css('height');
console.log(h); // "200px"(字符串类型,带px)

注意:返回的是字符串,需要解析才能计算!

三、各方法对比

方法内容PaddingBorderMargin返回类型
JS offsetHeight数字
JS clientHeight数字
JS getBoundingClientRect().height浮点数
JS scrollHeight数字
jQuery .height()数字
jQuery .innerHeight()数字
jQuery .outerHeight()数字
jQuery .outerHeight(true)数字
jQuery .css('height')字符串

四、实际应用场景

场景1:判断内容是否溢出

const div = document.getElementById('content');

if (div.scrollHeight > div.clientHeight) {
    console.log('内容溢出,需要滚动条');
    div.style.overflowY = 'auto';
}

场景2:居中对齐(垂直居中)

function centerVertically() {
    const container = $('#container');
    const child = $('#child');
    
    const containerH = container.height();
    const childH = child.outerHeight();
    
    child.css('margin-top', (containerH - childH) / 2);
}

场景3:响应式布局

$(window).resize(function() {
    const windowH = $(window).height();
    const headerH = $('#header').outerHeight();
    
    $('#main').css('height', windowH - headerH - 50);
});

场景4:获取视口高度

// 原生JS
const viewportHeight = window.innerHeight;

// jQuery
const viewportHeight = $(window).height();

五、常见问题解决

问题1:获取的高度为0

原因:元素还没渲染完成就获取了

解决

// 方案1:放在DOM ready中
$(document).ready(function() {
    var h = $('#myDiv').height();
});

// 方案2:图片加载完成后获取
$('img').on('load', function() {
    var h = $(this).height();
});

问题2:.css('height')返回 “auto”

原因:元素高度由内容撑开,没有显式设置

解决

// 使用 offsetHeight 代替
var h = document.getElementById('myDiv').offsetHeight;

// 或 jQuery
var h = $('#myDiv').height();

问题3:隐藏元素获取高度为0

原因display: none 的元素无法获取可视高度

解决

// 临时显示获取
const div = $('#myDiv');
div.show();
const h = div.height();
div.hide();

// 或使用 scrollHeight(即使隐藏也能获取)
const h = div[0].scrollHeight;

总结:该用哪个?

需求推荐方法
获取元素总高度(含边框).height() / offsetHeight
获取内容+内边距高度.innerHeight() / clientHeight
获取包含margin的总高度.outerHeight(true)
判断内容是否溢出scrollHeight > clientHeight
获取精确浮点高度getBoundingClientRect().height
获取CSS设置的高度值.css('height')

一句话总结

日常开发用 .height() 最方便,需要精确计算用原生 offsetHeight,判断溢出用 scrollHeight

以上就是JavaScript和jQuery获取元素高度的各种方法的详细内容,更多关于JavaScript和jQuery获取元素高度的资料请关注脚本之家其它相关文章!

相关文章

  • gulp-uglify 与gulp.watch()配合使用时报错(重复压缩问题)

    gulp-uglify 与gulp.watch()配合使用时报错(重复压缩问题)

    gulp是基于Nodejs的自动任务运行器,gulp 和 grunt 非常类似,但相比于 grunt 的频繁 IO 操作,gulp 的流操作,能更快地更便捷地完成构建工作。今天在学习gulp时遇到当用gulp.watch来监听js文件的变动时出现重复压缩问题,下面小编给大家解答下
    2016-08-08
  • JavaScript中SQL语句的应用实现

    JavaScript中SQL语句的应用实现

    最近一直在用javascript在做项目 可是做着做着 感觉很多功能代码都是重复的。
    2010-05-05
  • JavaScript执行机制、作用域及作用域链详解

    JavaScript执行机制、作用域及作用域链详解

    JavaScript中,作用域链(Scope Chain)是实现变量和函数访问的核心机制,它决定了代码中变量和函数的可访问范围,这篇文章主要介绍了JavaScript执行机制、作用域及作用域链的相关资料,需要的朋友可以参考下
    2026-03-03
  • 举例讲解JavaScript substring()的使用方法

    举例讲解JavaScript substring()的使用方法

    这篇文章主要通过举例的方法讲解了javaScript substring()的用法,substring() 方法用于提取字符串中介于两个指定下标之间的字符,感兴趣的小伙伴们可以参考一下
    2015-11-11
  • JavaScript 语言的递归编程

    JavaScript 语言的递归编程

    关于递归的解释见《SICP》第1章。下面是个简单的递归编程题目。
    2010-05-05
  • JS中实现数组开头添加元素

    JS中实现数组开头添加元素

    这篇文章主要介绍了JS中实现数组开头添加元素方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06
  • JavaScript错误处理超完整实用指南

    JavaScript错误处理超完整实用指南

    在JavaScript中进行错误处理,最常见的方式就是使用try catch语句,下面这篇文章主要给大家介绍了关于JavaScript错误处理的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-11-11
  • ES6基础之展开语法(Spread syntax)

    ES6基础之展开语法(Spread syntax)

    这篇文章主要介绍了ES6基础之展开语法(Spread syntax),主要介绍了扩展语法的使用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-02-02
  • 浅析JavaScript定时器setTimeout的时延问题

    浅析JavaScript定时器setTimeout的时延问题

    这篇文章主要为大家详细介绍了JavaScript中定时器setTimeout有最小时延的相关知识,文中的示例代码简洁易懂,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-11-11
  • JavaScript中fetch()用法实例

    JavaScript中fetch()用法实例

    在前端快速发展地过程中,为了契合更好的设计模式,产生了 fetch 框架,下面这篇文章主要给大家介绍了关于JavaScript中fetch()用法的相关资料,需要的朋友可以参考下
    2022-06-06

最新评论