zoukankan      html  css  js  c++  java
  • getComputedStyle与currentStyle获取样式(style/class)

    今天看jQuery源码CSS部分,里面用到了currentStyle和getComputedStyle来获取外部样式。

    因为elem.style.width只能获取elem的style属性里的样式,无法获取外部css文件中定义的样式,所以针对IE8以下以及其他浏览器,需要以这两种不同的方式获取外部css样式,即currentStyle和getComputedStyle。

    下面这篇文章讲的不错,也比较好理解,言简意赅,在此推荐以下。


    样式表有三种方式:

    内嵌样式(inline Style) :是写在Tag里面的,内嵌样式只对所有的Tag有效。   (也称作“内联样式”)

    内部样式(internal Style Sheet):是写在HTML的里面的,内部样式只对所在的网页有效。

    外部样式表(External Style Sheet):如果很多网页需要用到同样的样式(Styles),将样式(Styles)写在一个以.css为后缀的CSS文件里,然后在每个需要用到这些样式(Styles)的网页里引用这个CSS文件。 最常用的是style属性,在JavaScript中,通过document.getElementById(id).style.XXX就可以获取到XXX的值,但意外的是,这样做只能取到通过内嵌方式设置的样式值,即style属性里面设置的值。

     

    解决方案:引入currentStyle,runtimeStyle,getComputedStyle style 标准的样式,可能是由style属性指定的!

    runtimeStyle 运行时的样式!如果与style的属性重叠,将覆盖style的属性!

    currentStyle 指 style 和 runtimeStyle 的结合! 通过currentStyle就可以获取到通过内联或外部引用的CSS样式的值了(仅限IE) 如:document.getElementById("test").currentStyle.top

    要兼容FF,就得需要getComputedStyle 出马了

    注意: getComputedStyle是firefox中的, currentStyle是ie中的. 比如说

    <style>
    #mydiv {
         width : 300px;
    }
    </style>

    则:

    复制代码
    var mydiv = document.getElementById('mydiv');
    if(mydiv.currentStyle) {
          var width = mydiv.currentStyle['width'];
          alert('ie:' + width);
    } else if(window.getComputedStyle) {
          var width = window.getComputedStyle(mydiv , null)['width'];
          alert('firefox:' + width);
    }
    复制代码

    另外在FF下还可以通过下面的方式获取

    document.defaultView.getComputedStyle(mydiv,null).width;
    window.getComputedStyle(mydiv , null).width;


    function getStyle ( obj, attr ) { return obj.currentStyle?obj.currentStyle[attr] : getComputedStyle( obj )[attr]; }
  • 相关阅读:
    NBUT 1120 Reimu's Teleport (线段树)
    NBUT 1119 Patchouli's Books (STL应用)
    NBUT 1118 Marisa's Affair (排序统计,水)
    NBUT 1117 Kotiya's Incantation(字符输入处理)
    NBUT 1115 Cirno's Trick (水)
    NBUT 1114 Alice's Puppets(排序统计,水)
    188 Best Time to Buy and Sell Stock IV 买卖股票的最佳时机 IV
    187 Repeated DNA Sequences 重复的DNA序列
    179 Largest Number 把数组排成最大的数
    174 Dungeon Game 地下城游戏
  • 原文地址:https://www.cnblogs.com/nifengs/p/4958517.html
Copyright © 2011-2022 走看看