zoukankan      html  css  js  c++  java
  • 获取css样式表内样式的js函数currentStyle(IE),defaultView(FF)

    jS从样式表取值的函数,IE中以currentStyle,firefox中defaultView来获取,需要的朋友可以参考下。
    可是DOM.style这种写法只能访问<DOM></DOM>,这样在标签里内置的样式,如果样式写在<style type="text/css"></style>,或者.css文件里,那么就没有办法读到样式了。 
    其实呢,还有别的方法可以读到这些样式信息,方法有两种,一种是通过document.styleSheets对象,另一种是通过“最终样式”对象。其中 IE中这个对象叫做currentStyle,FF中这个对象叫做document.defaultView。我将这两个类打包了一下,做了一个用于访问 样式信息的函数,如下: 
    //===========================访问样式表函数====================================
    function returnStyle(obj,styleName){
    var myObj = typeof obj == "string" ? document.getElementById(obj) : obj;
    if(document.all){
    return eval("myObj.currentStyle." + styleName);
    } else {
    return eval("document.defaultView.getComputedStyle(myObj,null)." + styleName);
    }
    }
    函数有两个参数:
    obj:访问的对象,类型为DOM对象,或者是对象的id;
    styleName: 需要访问的样式名称。类型为string,但是名称不能用"-"号,要用像style.对象的属性名一样的大小写混写名称,例如background-color要写成backgroundColor。
     
    函数返回值为 string类型。 
    注意:这个方法只能访问样式文件,不能写。如果要写样式,还是要用DOM.style.XXX的方法。另外,FF下有些样式访问有问题,例如padding,margin。如果样式中设置了padding,margin等值,我们可以用marginLeft来返回值。 
    代码如下:
    view sourceprint?
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <style type="text/css">
    #demo{background-color:#000;padding:10px;color:#fff;200px;}
    </style>
    <script type="text/javascript">
    //===========================访问样式表====================================
    function returnStyle(obj,styleName){
    var myObj = typeof obj == "string" ? document.getElementById(obj) : obj;
    if(document.all){
    return eval("myObj.currentStyle." + styleName);
    } else {
    return eval("document.defaultView.getComputedStyle(myObj,null)." + styleName);
    }
    }
    </script>
    <title></title>
    </head>
    <body>
    <div id="demo">这里是测试内容</div>
    <br /><br />
    <a href="###" onclick="alert(returnStyle('demo','width'));">点击测试</a>
    </body>
    </html>
    ===========================
    复制代码代码如下:
    function getStyle( elem, name ) {
    //如果该属性存在于style[]中,则它最近被设置过(且就是当前的)
    if (elem.style[name])
    return elem.style[name];
    //否则,尝试IE的方式
    else if (elem.currentStyle)
    return elem.currentStyle[name];
    //或者W3C的方法,如果存在的话
    else if (document.defaultView && document.defaultView.getComputedStyle) {
    //它使用传统的"text-Align"风格的规则书写方式,而不是"textAlign"
    name = name.replace(/([A-Z])/g,"-$1");
    name = name.toLowerCase();
    //获取style对象并取得属性的值(如果存在的话)
    var s = document.defaultView.getComputedStyle(elem,"");
    return s && s.getPropertyValue(name);
    //否则,就是在使用其它的浏览器
    } else
    return null;
    }
  • 相关阅读:
    圆 abc模块的练习
    组合,封装,访问限制机制,property,多态,抽象类(了解),鸭子类型,多态旋技操作。
    继承初体验,寻找继承关系,继承背景下和对象属性查找顺序,派生,(子类派生出新的属性,并重新父类的属性),新式类与经典类,钻石继承。钻石继承实现修改jison模块数据类型。
    面向对象继承练习题
    基于面向对象设计一个对战游戏练习。
    面向对象基础,类,对象、对象与类的查找顺序,对象绑定方法的特殊之处,python一切皆是对象
    HihoCoder
    HihoCoder
    2019 牛客暑期多校 第三场 F Planting Trees (单调队列+尺取)
    2019 牛客暑期多校 第八场 A All-one Matrices (单调栈+前缀和)
  • 原文地址:https://www.cnblogs.com/top5/p/2100556.html
Copyright © 2011-2022 走看看