原生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 继承详解 第一篇
Aug 30 Javascript
ajax 同步请求和异步请求的差异分析
Jul 04 Javascript
Javascript的getYear、getFullYear、getUTCFullYear异同分享
Nov 30 Javascript
ext中store.load跟store.reload的区别示例介绍
Jun 17 Javascript
node.js中的fs.unlink方法使用说明
Dec 15 Javascript
javascript无刷新评论实现方法
May 13 Javascript
js实现获取两个日期之间所有日期的方法
Jun 17 Javascript
详解vue中computed 和 watch的异同
Jun 30 Javascript
vue项目中api接口管理总结
Apr 20 Javascript
还不懂递归?读完这篇文章保证你会懂
Jul 29 Javascript
你应该了解的JavaScript Array.map()五种用途小结
Nov 14 Javascript
vue简单封装axios插件和接口的统一管理操作示例
Feb 02 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
php判断上传的Excel文件中是否有图片及PHPExcel库认识
2013/01/11 PHP
php解析html类库simple_html_dom(详细介绍)
2013/07/05 PHP
php中session与cookie的比较
2015/01/27 PHP
WordPress特定文章对搜索引擎隐藏或只允许搜索引擎查看
2015/12/31 PHP
PHP生成(支持多模板)二维码海报代码
2018/04/30 PHP
Js基础学习资料
2010/11/23 Javascript
玩转jQuery按钮 请告诉我你最喜欢哪些?
2012/01/08 Javascript
js插件方式打开pdf文件(浏览器pdf插件分享)
2013/12/20 Javascript
IE6-IE9中tbody的innerHTML不能赋值的解决方法
2014/06/05 Javascript
Javascript添加监听与删除监听用法详解
2014/12/19 Javascript
js实现同一页面多个运动效果的方法
2015/04/10 Javascript
jQuery+css实现的换页标签栏效果
2016/01/27 Javascript
Node.js 应用跑得更快 10 个技巧
2016/04/03 Javascript
js获取Html元素的实际宽度高度的方法
2016/05/19 Javascript
JS针对浏览器窗口关闭事件的监听方法集锦
2016/06/24 Javascript
AngularJs中Bootstrap3 datetimepicker使用实例
2016/12/13 Javascript
vue对storejs获取的数据进行处理时遇到的几种问题小结
2018/03/20 Javascript
详解Node.js使用token进行认证的简单示例
2020/05/25 Javascript
js实现限定范围拖拽的示例
2020/10/26 Javascript
分析python切片原理和方法
2017/12/19 Python
python中实现将多个print输出合成一个数组
2018/04/19 Python
把pandas转换int型为str型的方法
2019/01/29 Python
python找出一个列表中相同元素的多个索引实例
2019/06/11 Python
wxpython布局的实现方法
2019/11/01 Python
加拿大奢华时装品牌:Mackage
2018/01/10 全球购物
20世纪40年代连衣裙和复古服装:The Seamstress Of Bloomsbury
2018/07/24 全球购物
Java基础知识面试要点
2016/07/29 面试题
大学校园毕业自我鉴定
2014/01/15 职场文书
乡镇干部先进事迹材料
2014/02/03 职场文书
学生会副主席竞聘书
2014/03/31 职场文书
英语专业自荐书
2014/06/13 职场文书
党组织关系的介绍信模板
2019/06/21 职场文书
如何使用CocosCreator对象池
2021/04/14 Javascript
Win10 和 Win11可以共存吗? win10/11产品生命周期/服务更新介绍
2021/11/21 数码科技
JavaScript实现栈结构详细过程
2021/12/06 Javascript
MySQL transaction事务安全示例讲解
2022/06/21 MySQL