美文网首页大前端
原生js获取css样式

原生js获取css样式

作者: 天問_专注于大前端技术 | 来源:发表于2017-03-13 11:43 被阅读203次

在前端开发过程中往往需要动态的编辑、修改一个UI的样式,这必然涉及到style的获取与设置。
一般都说有图有真相,而我们程序猿当然是用demo来说明一切,下面就根据一则具体事例探讨原生js获取css样式的方法。

  • 事例
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>test</title>
    <style>
        #div1{
            width: 200px;
            background:#00f;
            border: 1px solid #000;
        }
    </style>
</head>
<body>
<div id="div1" style="height:100px;"></div>
<script>
    window.onload = function() {
        var oDiv = document.getElementById('div1');
        // div的width
        console.log(oDiv.style.width);
        // div的height
        console.log(oDiv.style.height);
    }
</script>
</body>
</html>

经过浏览器运行之后,在console控制台很明显有输出。

  • 第一行是空白;
  • 第二行会输出100px

很多人不明白是怎么回事,想要获取的width怎么是空白。
原来是因为直接用oDiv.style方法只能获取元素的内联样式,对于内部样式外联样式,这种方法则不能取得。
因此要另寻出路,众所周知,IE浏览器总是别具一格,格外奇葩,所以这里还得解决兼容性问题:

  • IE浏览器:
var oDiv = document.getElementById('div');
var styles = oDiv.currentStyle;
styles.width;
  • 其他浏览器:
var oDiv = document.getElementById('div');
var style = window.getComputedStyle(oDiv, null);
styles.width;
  • 封装方法:
function getStyle(obj,attr){
    return obj.currentStyle?obj.currentStyle[attr]:getComputedStyle(obj)[attr];
}

提示:

  • 这个方法需要传两个参数,obj是将要获取样式的元素,attr则是样式的属性,如widthcolor等,调用此方法时attr必须要加上引号,不然会报错;
  • 此方法只能获取单一属性样式,像borderbackground等具有综合属性的样式,只有chrome浏览器能获取;而其他浏览器只能通过borderStyleColor这种驼峰命名单一属性来取得;
  • 如果使用的是jQuery,则不需要如此操作,可直接用$('obj').css('attr')来获取,因为JQ的底层就是用currentStyle[attr]getComputedStyle(obj)[attr]这种方法进行封装的。

参考博文:

相关文章

  • 原生js获取css样式

    在前端开发过程中往往需要动态的编辑、修改一个UI的样式,这必然涉及到style的获取与设置。一般都说有图有真相,而...

  • vue大坑之获取mint-ui内组件样式

    一.原生js获取css样式(实用,解决问题)必须要提出的是,我们使用 element.style 也可以获取元素的...

  • 脚本化初识

    一、脚本化:用JS去控制css样式1、获取css样式(1)获取行内样式var style=div.stylesty...

  • input type=file修改样式

    效果图 原本的样式 html结构 css样式 jq写法 原生js写法

  • jQuery(三)_设置CSS

    jQuery(三)_设置CSS 获取css样式相当于js中计算后的样式getComputedStyle(box)....

  • 原生js轮播图效果

    原生js轮播图 1.静态页面,布局结构 2.css样式 可以根据自己的喜好进行改动,本样式只供参考 3.原生js区...

  • js 获取css样式

    getComputedStyle(ele.attribute); 不兼容IE 8 及其以下 ele.curre...

  • [jQuery]设置css样式

    获取css样式 设置单个css样式 设置多个css样式

  • 表单案例

    HTML css样式 js样式

  • 原生js获取元素样式

    有时候我们要改变样式之前,需要先做条件判断,例如通过同一个按钮实现评论框的开关,这时我们就要先获取要操作的元素的C...

网友评论

    本文标题:原生js获取css样式

    本文链接:https://www.haomeiwen.com/subject/tlufnttx.html