从动态获取div高度的问题展开来看
ps 可能篇幅比较长,请大家耐心看看
今天有人在群里问我 动态获取高度怎么获取 我就说jq中的outerHeight、 height 、innerHeight 原生的height clientHeight、scrollHeight、offsetHeight 按道理百度一下 就ok 了 但是他问了一句这些有什么区别? 哎呦 我去 我还真的需要整理一下 好吧 咱们开始整理一下
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>动态获取div的高度问题</title>
<style type="text/css">
*{margin:0; padding: 0; border: none; }
body{padding: 100px;}
#div1{width: 200px; height: 200px; margin:10px; border: 1px solid red; }
</style>
</head>
<body>
<div id="div1"></div>
</body>
</html>
咱们先弄一个div放在这里 然后测试一下这些的区别 然后总结一下

这个是火狐中的盒模型解析出来的结果 请看好
下边咱们开始 直接写js 开始测试
先说一下这个height (因为他奇葩)有两点
1、height:
(1)其实Height高度跟其他的高度有点不一样,在javascript中它是属于对象的style对象属性中的一个成员,它的值是一个字符类型的,而另外 三个高度的值是int类型的,它们是对象的属性.因此这样document.body.height就会提示undenifine,而必须写成 document.body.style.height (好坑)
(2)只能在div在行内样式设置了height才能获取到(注意是行内 )----------->更坑
那么关于height的代码咱们发一下 (实际项目中应该用不到这么坑的东西了吧)
所以这个height 你在行内写了多少就是多少了(当然没有padding border之类的计算了)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>动态获取div的高度问题</title>
<style type="text/css">
*{margin:0; padding: 0; border: none; }
body{padding: 100px;}
#div1{width: 200px; height: 200px; margin:10px; border: 1px solid red; }
</style>
</head>
<body>
<div id="div1" style="height:200px"></div>
<script type="text/javascript">
window.onload=function () {
var oDiv =document.getElementById('div1');
alert( oDiv.style.height)//200
}
</script>
</body>
</html>
2、clientHeight: 是可见区域的宽度 也就是算上padding 不算border 的
window.onload=function () {
var oDiv =document.getElementById('div1');
alert( oDiv.clientHeight)
}//结果也是200
3、scrollHeight:它其实就是滚动条可滚动的部分还要加上boder的高度还要加上横向滚动条不可用的高度,与clientHeight比起来,多个border的高度跟横向滚动条不可用的高度.
我测试以后 发现火狐和谷歌都是不一样的数值 哎。。看来这个是不好用的 那就不上代码了 忽略它吧 倒是有很多项目中有获取到屏幕的顶部的距离这个效果之类的 等下次再说(感觉已写 就写出来的多了)
4、offsetHeight:均表示是自身的高度,如果有设置boder和padding的话还应该加上boder的值(例子中没有写padding 你可以自己加上是计算在内的)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>动态获取div的高度问题</title>
<style type="text/css">
*{margin:0; padding: 0; border: none; }
body{padding: 100px;}
#div1{width: 200px; height: 200px; margin:10px; border: 1px solid red; }
</style>
</head>
<body>
<div id="div1" ></div>
<script type="text/javascript">
window.onload=function () {
var oDiv =document.getElementById('div1');
alert( oDiv.offsetHeight)//202 加上border
}
</script>
</body>
</html>
好了原生的写完了 看一下就知道怎么回事了
下边开始说jq方法 看看封装以后是怎么样的
1、outerHeight:
api 解释的很详细啊
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>动态获取div的高度问题</title>
<style type="text/css">
*{margin:0; padding: 0; border: none; }
body{padding: 100px;}
#div1{width: 200px; height: 200px; margin:10px; border: 1px solid red; }
</style>
</head>
<body>
<div id="div1" ></div>
<script type="text/javascript"src="http://libs.baidu.com/jquery/2.0.3/jquery.min.js"></script>//百度的cdn
<script type="text/javascript">
$(function () {
alert($("#div1").outerHeight());//202
})
</script>
</body>
</html>
如果不设置为true的话 那么计算外部高度就是本身的200px+边框的2px ------->=202px;
如果你设置为true的话那么结果就是222 就加上了内边距20px
2、height:
详细的api啊
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>动态获取div的高度问题</title>
<style type="text/css">
*{margin:0; padding: 0; border: none; }
body{padding: 100px;}
#div1{width: 200px; height: 200px; margin:10px; border: 1px solid red; }
</style>
</head>
<body>
<div id="div1" ></div>
<script type="text/javascript"src="http://libs.baidu.com/jquery/2.0.3/jquery.min.js"></script>
<script type="text/javascript">
$(function () {
alert($("#div1").height());//200px
})
</script>
</body>
</html>
看着和js中的height是一样的啊 (除了原生的那两点坑爹)结果是一样的 而且jq还能直接设置数值 也就说获取之后可以直接设置他的height
3、innerHeight:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>动态获取div的高度问题</title>
<style type="text/css">
*{margin:0; padding: 0; border: none; }
body{padding: 100px;}
#div1{width: 200px; height: 200px; margin:10px; border: 1px solid red; padding: 10px; }
</style>
</head>
<body>
<div id="div1" ></div>
<script type="text/javascript"src="http://libs.baidu.com/jquery/2.0.3/jquery.min.js"></script>
<script type="text/javascript">
$(function () {
alert($("#div1").innerHeight());//220px
})
</script>
</body>
</html>
也就是说 会把当前的height数值加上内边框
总结: 写完了。。。。。。。。
从动态获取div高度的问题展开来看的更多相关文章
- JS获取div高度的方法
有时在写页面时,需要获取一个div的高度.怎么才能获取呢?哈哈,先上结论.有两种方法. offsetHeight .clientHeight getComputedStyle offsetHeight ...
- 动态获取div的高度 随着窗口变化而变化
// 1.jq法 <script> var winHeight = $(window).height(); $("#show").css("height&qu ...
- js使用offsetHeight获取div高度为0的问题
今晚试了好久没弄出来,后来获取子一层的div就能获取到高度了 我的情况是这样的:我在最外面写一个<div id="mainBody">, 里面写bootstrap的d ...
- javascript获取div高度
DOM的: 获得了div的高度值 = document.getElementById("目标id").offsetHeight;
- vue 动态获取div宽高有时候为0的情况
项目背景: 需要使用echarts进行图表展示.由于div宽高是不固定的,因此需要先获取父级的宽高再把值赋予到图表的div中. 需要使用 this.$nextTick(() => { }) ...
- jquery动态修改div高度
<!DOCTYPE html> <html> <head> <script src="jquery-1.4.2.min.js">&l ...
- 获取iframe(angular 动态页面)高度
问题比较特殊,google了好久才得到启示 开发的angular页面,需要嵌入到客户的web页中,以iframe方式.由于iframe的高度需要指定,而angular动态生成机制导致页面高度会随时变化 ...
- jquery动态改变div宽度和高度
效果体验:http://keleyi.com/keleyi/phtml/jquery/23.htm 完整代码: <!DOCTYPE html PUBLIC "-//W3C//DTD X ...
- Js动态获取iframe子页面的高度////////////////////////zzzz
Js动态获取iframe子页面的高度 Js动态获取iframe子页面的高度总结 问题的缘由 产品有个评论列表引用的是个iframe,高度不固定于是引发这个总结. 方法1:父级页面获取子级页面的高度 ...
随机推荐
- 工作组模式下专用队列(Private Queue)如何引用远程队列路径
查了N久资料,包括MSDN的官方文档,对于同一工作组下,不同机器之间如何利用Private Queue(专用队列)来发送/接收消息,关于Path的引用一说,无非都是MachineName\privat ...
- appium python学习记录
这是网上找到的测试用例 from appium import webdriver desired_caps = {} desired_caps['platformName'] = 'Android' ...
- ASIHttpRequest请求时的默认编码
在ASIHttpRequest.m文件 中的 - (id)initWithURL:(NSURL *)newURL方法中找到 [self setDefaultResponseEncoding:NSISO ...
- zabbix proxy分布式监控部署
一.proxy分布式监控介绍 来源于zabbix官网: https://www.zabbix.com/documentation/3.4/zh/manual/distributed_monitorin ...
- DevExpress控件之GridControl、GridView
GridControl对应标准WinForm里的GridView,相当于是一个控件,里面包含多个GridView也可以放其它的控件 禁止修改gridView1.OptionsBehavior.Edit ...
- C#基于Socket的CS模式的完整例子
基于Socket服务器端实现本例主要是建立多客户端与服务器之间的数据传输,首先设计服务器.打开VS2008,在D:\C#\ch17目录下建立名为SocketServer的Windows应用程序.打开工 ...
- 服务器和java程序的桥梁--jdbc/hibernate
现实的应用程序都是用户通过可视化界面发出指令从而修改数据库.本篇文章以Oracle为例,模拟怎么通过java代码实现数据库的增删改查. 新建一个Java项目,要建好桥梁,首先要拷入驱动Jar包放在项目 ...
- hibernate学习系列-----(4)hibernate基本查询上篇:HQL基本查询
紧接着上一篇,今天继续hibernate的学习总结,来聊一聊hibernate的基本查询方法,先说说HQL(hibernate Query Language):它是官方推荐的查询语言.在开始写代码之前 ...
- TCO'10 Wildcard Round 1000pt
题目大意: 给定一个N*M的棋盘,棋子可以攻击其左右距离不超过K的棋子.问有多少种放法使得棋盘上的棋子不能互相攻击. N,M,K都在1到1000000000的范围内,结果对100003取模. 官方题解 ...
- Odoo many2many command
CREATE = lambda values: (0, False, values) // (0,False, Values) //创建 UPDATE = lambda id, values: (1, ...