zoukankan      html  css  js  c++  java
  • 【学习篇】JavaScript访问样式表

    故事背景:在web页面中,我们经常需要通过修改样式(style)来达到更好的用户体验,比如:当我们将鼠标移动到一个图标上的时候,图标会出现一些动画效果(渐变放大、闪动、更换颜色等),而这一切的友好效果基本上都跟样式(style)有关,所以这一篇,我学习JavaScript对style的操作。

    技术关键点:style。这一篇要求我们对CSS样式有一定的了解。(读者可以google一下CSS的相关内容)

    操作步骤

    1、页面代码(包括JS代码)如下:

    <!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>
        <title>Style Example</title>
        <style type="text/css">
            div.special
            {
            	background-color:Red;
            	height:50px;
            	50px;
            	}
        </style>
        
        <script type="text/javascript">
            function getBackGroundColor() {
                var oDiv = document.getElementById("div1");
                alert(oDiv.style.backgroundColor);
            }
        </script>
    </head>
    <body>
        <div id="div1" class="special"></div>
        <input type="button" value="Get BackGround Color" onclick="getBackGroundColor();"/>
    </body>
    </html>
    

    JS代码中获得了div对象,并输出了div对象的背景颜色,一切看起来都那么完美,可是效果总是让我们失望,如下:

     

    这样看来,JavaScript以这种方式去访问CSS样式无法达到效果,原因:CSS数据并非存储在style属性中,而是存储在类中。所以接下来要做的:就是怎么样去访问CSS类?

    2、幸运的是,我们找到了document.styleSheets集合。document.styleSheets包含了html页面中所有样式表的引用和所有的<style>元素。

    因为浏览器的不同,访问样式表中单独的规则(规则:指定是CSS类,例如上面html代码中的div.special)的方法是不同的。DOM为每一个样式表指定一个cssRules的集合,但是IE却把这个集合命名为rules。所以在获取样式集合之前,代码需要做一个技巧性的改动:

    oCSSRules = document.styleSheets[0].cssRules || document.styleSheets[0].rules;
    

    每个规则都包含selectorText特性,div.special就是上面html中CSS规则的selectorText的值。规则还包含style属性,这个时候就可以通过style属性获取背景颜色了。来看代码吧:

    function getBackGroundColor() {
                var oCSSRules = document.styleSheets[0].cssRules || document.styleSheets[0].rules;
                alert(oCSSRules[0].style.backgroundColor);
            }

    代码效果:

     

    3、这个时候,你可用通过修改样式来改变背景颜色,但是最好不要这样做,因为你改掉的是CSS类,其他引用了改CSS类的元素也会改变背景颜色,所以如果需要修改样式,做好直接修改单个元素的style属性,比如:document.getElementById("div1").style.backgroundColor="Blue";

  • 相关阅读:
    Leetcode Reverse Words in a String
    topcoder SRM 619 DIV2 GoodCompanyDivTwo
    topcoder SRM 618 DIV2 MovingRooksDiv2
    topcoder SRM 618 DIV2 WritingWords
    topcoder SRM 618 DIV2 LongWordsDiv2
    Zepto Code Rush 2014 A. Feed with Candy
    Zepto Code Rush 2014 B
    Codeforces Round #245 (Div. 2) B
    Codeforces Round #245 (Div. 2) A
    Codeforces Round #247 (Div. 2) B
  • 原文地址:https://www.cnblogs.com/jiangzhichao/p/1852157.html
Copyright © 2011-2022 走看看