原生javascript获取元素样式


Posted in Javascript onDecember 31, 2014

摘要:
    我们在开发过程中经常会遇到通过js获取或者改变DOM元素的样式,方法有很多,比如:通过更改DOM元素的class。现在我们讨论原生js来获取DOM元素的CSS样式,注意是获取不是设置

    在开始之前先说下获取最终应用在元素上的所有CSS属性对象的意思是,如果没有给元素设置任何样式,也会把浏览器默认的样式返回来。

1、ele.style
    在学习DOM的时候就看到通过ele.style来获取元素样式值,但是有时候获取的并非是节点的样式值,而是空值。这是因为ele.style只能获取写在元素标签中的style属性里的样式值,无法获取到定义在<style></style>和通过<link href="css.css">加载进来的样式属性

    例子:

        var test = document.getElementById("test");

        //获取节点的color

        test.style.color;

2、getComputedStyle()
    getComputedStyle是一个可以获取当前元素所有最终使用的CSS属性值。

    语法如下:

        window.getComputedStyle("元素", "伪类");

    这个方法接受两个参数:要取得计算样式的元素和一个伪元素字符串(例如“:before”) 。如果不需要伪元素信息,第二个参数可以是null。也可以通过document.defaultView.getComputedStyle("元素", "伪类");来使用

    例子:

        var test = document.getElementById("test"),

        demo = window.getComputedStyle(test, null); 

        //获取节点的color

         demo.color 

    注意:Firefox和Safari会将颜色转换成rgb格式,如果test节点上没有任何样式,通过style.length来查看浏览器默认样式的个数。IE6-8不支持该方法,需要使用下面的方法

3、ele.currentStyle
    currentStyle是IE浏览器自己的一个属性,其语法与ele.style类似,差别在于element.currentStyle返回的是元素当前应用的最终CSS属性值(包括外链CSS文件,页面中嵌入的<style>属性等)。

    语法:

        var style = dom.currentStyle;

    例子:

        var test = document.getElementById("test"),

        demo = test.currentStyle; 

        //获取节点的color

        demo.color;

     注意:对于综合属性border等,ie返回undefined,其他浏览器有的返回值,有的不返回,但是borderLeftWidth这样的属性是返回值的

4、getPropertyValue()
    getPropertyValue获取CSS样式的直接属性名称

    语法如下:

        window.getComputedStyle(element, null).getPropertyValue(属性)

    例子:

      var test = document.getElementById('test');

      window.getComputedStyle(test, null).getPropertyValue("background-color");

     注意:属性名不支持驼峰格式,IE6-8不支持该方法,需要使用下面的方法

5、getAttribute
    getAttribute与getPropertyValue类似,有一点的差异是属性名驼峰格式

    例子:

        var test = document.getElementById('test');

        window.getComputedStyle(test, null).getPropertyValue("backgroundColor");

    注意:该方法只支持IE6-8

小结:
    jQuery的CSS()方法,其底层运作就应用了getComputedStyle以及getPropertyValue方法,当我们使用原生的js开发时就可以通过以上方法获取元素的值。

下面是一个兼容ie,firefox,chrome等浏览器的获取元素样式的方法,可以应用到项目中

 function getStyle(ele) {

     var style = null;

     

     if(window.getComputedStyle) {

         style = window.getComputedStyle(ele, null);

     }else{

         style = ele.currentStyle;

     }

     

     return style;

 }
Javascript 相关文章推荐
关于__defineGetter__ 和__defineSetter__的说明
May 12 Javascript
JS类定义原型方法的两种实现的区别评论很多
Sep 12 Javascript
js文本框走动跑马灯效果代码分享
Aug 25 Javascript
node.js require() 源码解读
Dec 13 Javascript
JavaScript文本框脚本编写的注意事项
Jan 25 Javascript
canvas实现动态小球重叠效果
Feb 06 Javascript
10道典型的JavaScript面试题
Mar 22 Javascript
angular实现IM聊天图片发送实例
May 08 Javascript
JS实现的缓冲运动效果示例
Apr 30 Javascript
JavaScript canvas绘制圆弧与圆形
Feb 18 Javascript
小程序开发之模态框组件封装
Apr 23 Javascript
一篇文章学会Vue中间件管道
Jun 20 Vue.js
JavaScript分析、压缩工具JavaScript Analyser
Dec 31 #Javascript
jQuery中:last-child选择器用法实例
Dec 31 #Javascript
jQuery中:nth-child选择器用法实例
Dec 31 #Javascript
jQuery中:first-child选择器用法实例
Dec 31 #Javascript
jQuery中复合属性选择器用法实例
Dec 31 #Javascript
javascript实现左右控制无缝滚动
Dec 31 #Javascript
javascript比较两个日期的先后示例代码
Dec 31 #Javascript
You might like
PHP中strtotime函数使用方法详解
2011/11/27 PHP
ThinkPHP CURD方法之where方法详解
2014/06/18 PHP
PHP中几个可以提高运行效率的代码写法、技巧分享
2014/08/21 PHP
laravel Task Scheduling(任务调度)在windows下的使用详解
2019/10/22 PHP
关于__defineGetter__ 和__defineSetter__的说明
2007/05/12 Javascript
JavaScript设计模式之外观模式实例
2014/10/10 Javascript
easyui validatebox验证
2016/04/29 Javascript
浅析Javascript中bind()方法的使用与实现
2016/05/30 Javascript
Vuejs第九篇之组件作用域及props数据传递实例详解
2016/09/05 Javascript
详解angularjs结合pagination插件实现分页功能
2017/02/10 Javascript
JS实现最简单的冒泡排序算法
2017/02/15 Javascript
原生JS实现的多个彩色小球跟随鼠标移动动画效果示例
2018/02/01 Javascript
js正则取值的结果数组调试方法
2018/10/10 Javascript
JS实现深度优先搜索求解两点间最短路径
2019/01/17 Javascript
Python基类函数的重载与调用实例分析
2015/01/12 Python
python机器学习之神经网络(一)
2017/12/20 Python
Python快速查找list中相同部分的方法
2018/06/27 Python
解决Pycharm运行时找不到文件的问题
2018/10/29 Python
Python使用type关键字创建类步骤详解
2019/07/23 Python
python [:3] 实现提取数组中的数
2019/11/27 Python
导入tensorflow:ImportError: libcublas.so.9.0 报错
2020/01/06 Python
python中urllib.request和requests的使用及区别详解
2020/05/05 Python
纯CSS3实现地球自转实现代码(图文教程附送源码)
2012/12/26 HTML / CSS
CSS3模拟IOS滑动开关效果
2016/09/28 HTML / CSS
H5页面适配iPhoneX(就是那么简单)
2019/12/02 HTML / CSS
世界首屈一指的在线男士内衣权威:HisRoom
2017/08/05 全球购物
EQVVS官网:设计师男装和女装
2018/10/24 全球购物
英国最大的在线时尚眼镜店:Eyewearbrands
2019/03/12 全球购物
万户网络JAVA程序员岗位招聘笔试试卷
2013/01/08 面试题
安全生产检讨书
2014/01/21 职场文书
本科毕业生求职自荐信
2014/02/03 职场文书
企业党员个人自我评价
2014/09/20 职场文书
2016年第29个世界无烟日宣传活动总结
2016/04/06 职场文书
创业计划书之宠物店
2019/09/19 职场文书
MySQL into_Mysql中replace与replace into用法案例详解
2021/09/14 MySQL
SpringBoot 集成短信和邮件 以阿里云短信服务为例
2022/04/22 Java/Android