原生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 相关文章推荐
javascript add event remove event
Apr 07 Javascript
javascript 面向对象,实现namespace,class,继承,重载
Oct 29 Javascript
extJs 下拉框联动实现代码
Apr 09 Javascript
JavaScript NodeTree导航栏(菜单项JSON类型/自制)
Feb 01 Javascript
js综合应用实例简单的表格统计
Sep 03 Javascript
jquery ajax 局部刷新小案例
Feb 08 Javascript
jQuery操作cookie方法实例教程
Nov 25 Javascript
初识Node.js
Mar 20 Javascript
js实现的黑背景灰色二级导航菜单效果代码
Aug 24 Javascript
JavaScript 2018 中即将迎来的新功能
Sep 21 Javascript
bootstrap table.js动态填充单元格数据的多种方法
Jul 18 Javascript
解决layui批量传值到后台操作时出现传值为空的问题
Sep 28 Javascript
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
mysql 查询指定日期时间内sql语句实现原理与代码
2012/12/16 PHP
phpcms模块开发之swfupload的使用介绍
2013/04/28 PHP
学习php中的正则表达式
2014/08/17 PHP
PHP经典实用正则表达式小结
2017/05/04 PHP
PHP迭代与递归实现无限级分类
2017/08/28 PHP
PHP根据树的前序遍历和中序遍历构造树并输出后序遍历的方法
2017/11/10 PHP
一次失败的jQuery优化尝试小结
2011/02/06 Javascript
原生js 秒表实现代码
2012/07/24 Javascript
jQuery 仿百度输入标签插件附效果图
2014/07/04 Javascript
jQuery晃动层特效实现方法
2015/03/09 Javascript
jQuery密码强度检测插件passwordStrength用法实例分析
2015/10/30 Javascript
Javascript之BOM(window对象)详解
2016/05/25 Javascript
总结AngularJS开发者最常犯的十个错误
2016/08/31 Javascript
Vue.js路由组件vue-router使用方法详解
2016/12/02 Javascript
Vue.js 2.0 移动端拍照压缩图片上传预览功能
2017/03/06 Javascript
如何使用 vue + d3 画一棵树
2018/12/03 Javascript
JavaScript偏函数与柯里化实例详解
2019/03/27 Javascript
js尾调用优化的实现
2019/05/23 Javascript
小程序中英文混合排序问题解决
2019/08/02 Javascript
webpack的pitching loader详解
2019/09/23 Javascript
NodeJS有难度的面试题(能答对几个)
2019/10/09 NodeJs
[55:47]DOTA2上海特级锦标赛C组小组赛#2 LGD VS Newbee第三局
2016/02/27 DOTA
python回调函数用法实例分析
2015/05/09 Python
Python爬取网易云音乐热门评论
2017/03/31 Python
情人节快乐! python绘制漂亮玫瑰
2020/08/18 Python
Pycharm 2020最新永久激活码(附最新激活码和插件)
2020/09/17 Python
tensorflow图像裁剪进行数据增强操作
2020/06/30 Python
Python特殊属性property原理及使用方法解析
2020/10/09 Python
Python调用SMTP服务自动发送Email的实现步骤
2021/02/07 Python
css3中background新增的4个新的相关属性用法介绍
2013/09/26 HTML / CSS
最新远光软件笔试题面试题内容
2013/11/08 面试题
平面设计自荐信
2013/10/07 职场文书
2014年两会学习心得范例
2014/03/17 职场文书
黄金酒广告词
2014/03/21 职场文书
2019年家电促销广告语集锦
2019/10/21 职场文书
关于MySQL中explain工具的使用
2023/05/08 MySQL