位置: 编程技术 - 正文

用JavaScript获取DOM元素位置和尺寸大小的方法(js获取tbody)

编辑:rootadmin

在一些复杂的页面中经常会用JavaScript处理一些DOM元素的动态效果,这种时候我们经常会用到一些元素位置和尺寸的计算,浏览器兼容性问题也是不可忽略的一部分,要想写出预想效果的JavaScript代码,我们需要了解一些基本知识。

基础概念

为了方便理解,我们需要了解几个基础概念,每个HTML元素都有下列属性

offsetWidth

clientWidth

scrollWidth

offsetHeight

clientHeight

scrollHeight

offsetLeft

clientLeft

scrollLeft

offsetTop

clientTop

scrollTop

为了理解这些属性,我们需要知道HTML元素的实际内容有可能比分配用来容纳内容的盒子更大,因此可能会出现滚动条,内容区域是视口,当实际内容比视口大的时候,需要把元素的滚动条位置考虑进去。

1. clientHeight和clientWidth用于描述元素内尺寸,是指 元素内容+内边距 大小,不包括边框(IE下实际包括)、外边距、滚动条部分

2. offsetHeight和offsetWidth用于描述元素外尺寸,是指 元素内容+内边距+边框,不包括外边距和滚动条部分

3. clientTop和clientLeft返回内边距的边缘和边框的外边缘之间的水平和垂直距离,也就是左,上边框宽度

4. offsetTop和offsetLeft表示该元素的左上角(边框外边缘)与已定位的父容器(offsetParent对象)左上角的距离

5. offsetParent对象是指元素最近的定位(relative,absolute)祖先元素,递归上溯,如果没有祖先元素是定位的话,会返回null

写个小例子方便理解效果如图

从图中我们可以看到,clientHeight就是div的高度+上下各px的padding,clientWidth同理

而clientLeft和ClientTop即为div左、上边框宽度

offsetHeight是clientHeight+上下个3px的边框宽度之和,offsetWidth同理

offsetTop是div px的 maggin+offsetparent 8px的 padding,offsetLeft同理

6. scrollWidth和scrollHeight是元素的内容区域加上内边距加上溢出尺寸,当内容正好和内容区域匹配没有溢出时,这些属性与clientWidth和clientHeight相等

7. scrollLeft和scrollTop是指元素滚动条位置,它们是可写的

下面写个简单例子理解

在FireFox和IE(IE以下版本盒模型和W3C标准不一致,不加讨论,兼容性问题下面会介绍到)下得到结果scrollHeight: ,而在Chrome和Safari下得到结果scrollHeight: ,差了8px,根据8可以简单推测是divParent的padding,来算一下是不是

我们可以看看它们的结果是怎么来的,首先scrollHeight肯定包含了divDisplay所需的高度 px的高度+上下各px的padding+上下各3px的border+上下各px的margin,这样

+*2+3*2+*2=

这样+8=, +8*2=果真是这样,在FireFox和IE下没有计算下padding

有了这些基础知识后,我们就可以计算元素的位置和尺寸了。

相对于文档与视口的坐标

当我们计算一个DOM元素位置也就是坐标的时候,会涉及到两种坐标系,文档坐标和视口坐标。

我们经常用到的document就是整个页面部分,而不仅仅是窗口可见部分,还包括因为窗口大小限制而出现滚动条的部分,它的左上角就是我们所谓相对于文档坐标的原点。

视口是显示文档内容的浏览器的一部分,它不包括浏览器外壳(菜单,工具栏,状态栏等),也就是当前窗口显示页面部分,不包括滚动条。

如果文档比视口小,说明没有出现滚动,文档左上角和视口左上角相同,一般来讲在两种坐标系之间进行切换,需要加上或减去滚动的偏移量(scroll offset)。

为了在坐标系之间进行转换,我们需要判定浏览器窗口的滚动条位置。window对象的pageXoffset和pageYoffset提供这些值,IE 8及更早版本除外。也可以通过scrollLeft和scrollTop属性获得滚动条位置,正常情况下通过查询文档根节点(document.documentElement)来获得这些属性值,但在怪异模式下必须通过文档的body上查询。

有时候能够判断视口的尺寸也是非常有用的

文档坐标

任何HTML元素都拥有offectLeft和offectTop属性返回元素的X和Y坐标,对于很多元素,这些值是文档坐标,但是对于以定位元素后代及一些其他元素(表格单元),返回相对于祖先的坐标。我们可以通过简单的递归上溯累加计算

尽管如此,这个函数也不总是计算正确的值,当文档中含有滚动条的时候这个方法就不能正常工作了,我们只能在没有滚动条的情况下使用这个方法,不过我们用这个原理算出一些元素相对于某个父元素的坐标。

视口坐标

计算视口坐标就相对简单了很多,可以通过调用元素的getBoundingClientRect方法。方法返回一个有left、right、top、bottom属性的对象,分别表示元素四个位置的相对于视口的坐标。getBoundingClientRect所返回的坐标包含元素的内边距和边框,不包含外边距。兼容性很好,非常好用

元素尺寸

由上面计算坐标方法,我们可以方便得出元素尺寸。在符合W3C标准的浏览器中getBoundingClientRect返回的对象还包括width和height,但在原始IE中未实现,但是通过返回对象的right-left和bottom-top可以方便计算出。

推荐整理分享用JavaScript获取DOM元素位置和尺寸大小的方法(js获取tbody),希望有所帮助,仅作参考,欢迎阅读内容。

用JavaScript获取DOM元素位置和尺寸大小的方法(js获取tbody)

文章相关热门搜索词:js获取值的几种方法,javascript中如何获取元素?,js获取guid,js获取guid,js获取tbody,js获取tbody,js获取tbody,javascript获取id的方法,内容如对您有帮助,希望把文章链接给更多的朋友!

基于JavaScript实现 获取鼠标点击位置坐标的方法 在一些DOM操作中我们经常会跟元素的位置打交道,鼠标交互式一个经常用到的方面,令人失望的是不同的浏览器下会有不同的结果甚至是有的浏览器下

有关javascript的性能优化 (repaint和reflow) repaint(重绘),repaint发生更改时,元素的外观被改变,且在没有改变布局的情况下发生,如改变outline,visibility,backgroundcolor,不会影响到dom结构渲染。reflow

Javascript的时间戳和php的时间戳转换注意事项 这里要注意的是js的时间戳是位,php的时间戳是位,转换函数如下:varnowtime=(newDate).getTime();/*当前时间戳*//*转换时间,计算差值*/functioncomptime(beginTime,e

标签: js获取tbody

本文链接地址:https://www.jiuchutong.com/biancheng/377666.html 转载请保留说明!

上一篇:深入理解JavaScript 闭包究竟是什么(深入理解中国式现代化)

下一篇:基于JavaScript实现 获取鼠标点击位置坐标的方法(基于javascript的毕业设计选题)

  • 海南增值税发票图片
  • 购买财务软件做什么科目
  • 5月份企业所得税
  • 企业如何进行纳税申报
  • 租赁合同印花税双方都要交吗
  • 增值税结转和个体工商户的增值税缴纳分录如何做?
  • 增值税纳税义务发生地点的规定
  • 盘盈的固定资产怎么做账务处理
  • 稳岗补贴属于不征税收入吗
  • 个人如何开现金账户
  • 融资租入的办公楼属于固定资产吗
  • 隔月的发票冲红了税怎么办
  • 银行汇兑怎么做账
  • 印花税工会经费会计分录
  • 应收账款预付账款属于什么科目
  • 官司赔偿费用需要发票吗
  • 视同销售行为销项税额该怎么核算
  • 生产经营活动包括建设项目吗
  • 工程施工开具发票
  • 技术服务费属于什么税收分类编码
  • 广告制作费怎么入账
  • 企业出售旧设备的收入要纳税吗
  • 买二手车转让费一般要多少钱
  • 人工成本全额扣除吗
  • 长期未收回的应收账款企业所得税
  • 员工两处取得工资收入
  • 预付卡充值赠送的金额确认收入
  • 收到投资方投入设备一台,投资合同约定其价值
  • 退税有啥影响
  • 本年利润有余额可以结账吗
  • 分公司收到总公司利润分录怎么写
  • win10平板模式怎么切换
  • 设备租赁费属于固定成本吗
  • 提供劳务收入如何核算
  • 30个极致实用的东西
  • Laravel 5.4向IoC容器中添加自定义类的方法示例
  • 涉及产权的案例
  • 不得领购使用增值税专用发票
  • php的lamp
  • ieee下载论文
  • 房地产企业销售佣金税前扣除
  • 基于stm32f103c8t6的毕业设计
  • 微信小程序授权管理在哪里
  • phpstorm创建php文件
  • 专用发票抵扣联是什么意思
  • Blog2N如何计算
  • 增值税及附加交给国税还是地税
  • 出租车发票上没有税务局的印章能报销么
  • 零售行业的销售额由什么决定
  • 防洪费需要计提吗
  • 总账与总账之间的核对
  • 在建工程结束后怎么处理
  • 补缴的以前年度的税费怎么记账
  • 税务局代开的增值税专票可以红冲吗?
  • 应收账款期初余额错了怎么调整
  • 当月没认证的发票当月不用进行账务处理吗
  • 法人章和财务章尺寸
  • 多交的社保费可以退吗
  • 设置会计账簿应当遵循的基本原则有
  • mysql快照读的实现
  • qq远程协助点不动
  • win7使用率
  • win8系统升级
  • mac有线不能上网
  • centos6 grub
  • linux磁盘的使用方式
  • 设置使用资源管理器查看文件时,显示已知文件的扩展名
  • win8系统无线网络图标不见了
  • win10开机黑屏进入不了系统界面
  • windows7的注册表在哪里
  • 快速掌握押韵技巧
  • 照片墙安装教程
  • 纯css实现轮播图
  • shell线程操作命令
  • shell命令行参数个数
  • jquery escape
  • unity c语言
  • android java编程
  • 煤炭资源税税率调整
  • 国税官网登录
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设