微信号:admin10000_com

介绍:分享Web开发知识,让开发变得更简单!

Javascript 获取 Dom 样式的方法有哪些

2018-04-14 13:19 冷谦大侠

获取方法

一、element.style 属性

获取dom元素的style属性

例子:

// index.html
<div id="el" style="width:300px">content</div>

<script>
var el = document.getElementById('el')  
console.log(el.style.width) // => '300px'
console.log(el.style.height) // => ''
</script>

这种方式可获取,也可修改值。优点是兼容性比较好。缺点是有局限性,只能通过写入内联才能获取样式。

二、element.currentStyle 属性

只支持IE6~8.....

三、window.getComputedStyle(element) 方法

getComputedStyle是一个可以获取当前元素所有最终使用的CSS属性值也可以获取伪类中的属性。返回的是一个CSS样式声明对象([object CSSStyleDeclaration]),只读。

相关文章《获取元素CSS值之getComputedStyle方法熟悉》

http://www.zhangxinxu.com/wordpress/2012/05/getcomputedstyle-js-getpropertyvalue-currentstyle/

支持IE8以上

例子:

var el = document.getElementById('el') 
console.log(window.getComputedStyle(element).getPropertyValue('width'))

jQuery的CSS()方法就是用此方法的,

四、element.getBoundingClientRect()方法

var el = document.getElementById('el') 
el.getBoundingClientRect().width // 获取宽度

相关文章《滚动容器尺寸变化子元素视觉上位置不变JS实现》

http://www.zhangxinxu.com/wordpress/2018/02/container-scroll-position-hold/

获取宽度的方法总结

content-box:默认情况下 box-sizing: content-box

兼容性 方法
IE5.5+ element.style.width
IE6~8 element.currentStyle.width
IE8以上 window.getComputedStyle(element).getPropertyValue('width')
IE8以上 element.getBoundingClientRect().width

padding-box:

兼容性 方法
IE5.5+ element.clientWidth
IE5.5+ element.scrollWidth

border-box:

兼容性 方法
IE5.5+ element.offsetWidth

margin-box:

没有原生接口直接获取

计算方法:
1、获取元素padding-box宽度
2、获取元素margin-left和margin-right大小
3、三个数值相加

例子:

var box = document.querySelector('.box')
var paddingWidth = box.clientWidth;
var marginLeft = +window.getComputedStyle(box).getPropertyValue('margin-left').match(/^\d*/)[0]
var marginRight = +window.getComputedStyle(box).getPropertyValue('margin-right').match(/^\d*/)[0]
var res = paddingWidth + marginLeft + marginRight

jQuery api:

盒子范围 方法
content-box $().width()
padding-box $().innerWidth()
border-box $().outerWidth()
margin-box $().outerWidth(true)

相关文章《cssom视图模式cssom-view-module相关整理与介绍》

http://www.zhangxinxu.com/wordpress/2011/09/cssom

via:https://segmentfault.com/a/1190000014368881

 
全栈开发者中心 更多文章 Web前端开发规范手册 现代CSS进化史 BAT大咖在2018年首次透露高薪的套路【50万以上】 彩票怎样才能中奖? 被遗忘的CSS
猜您喜欢 Android Gradle 技巧之二: 最爱命令行 一种避免iOS内存碎片的方法 高性能服务器架构--在日志数据校验中的运用(上篇) 促促促,如何确保系统扛得住 | 《尽在双11》抢鲜预览 [S3-E428]深入浅出基于“依赖收集”的响应式原理