zoukankan      html  css  js  c++  java
  • day26—JavaScript对CSS样式的获取和修改实践

    转行学开发,代码100天——2018-04-11

    通过JavaScript获取和修改HTML元素及CSS属性是其一个基本功能。对于CSS样式通常有行内样式,外部样式,内嵌样式之分。

    如:

    行内样式:

        <div id="box" style=" 100px;height: 100px;background:#ccc"></div>

    外部样式:

    <link rel="stylesheet" type="text/css" href="ccss.css">

    内嵌样式:

    <style type="text/css">
    #div{width:100px;height:100px;background:red;}
    </style>

     对于样式的获取也因其写入方式不同而有所区别:

    对于行内样式的获取,用  obj.style.属性方式

    如下面的一个获取和修改行内样式的案例:

    <!DOCTYPE html>
    <html>
    <head>
        <title>JavaScript获取样式的方式</title>
        <script type="text/javascript">
            //css样式获取和修改方法,两个参数时,获取;三个参数时修改
            function css(obj){
                alert(arguments[0]);
                if (arguments.length==2) {
                    return arguments[0].style[arguments[1]];
                }else
                {
                    arguments[0].style[arguments[1]] = arguments[2];
                }
            }
            //封装获取元素方法
            function $(id){return document.getElementById(id);}
            window.onload =function () {
                var box = $('box');
                alert(css(box,"width"));//获取
                css(box,"width","200px");//设置属性
    
            }
        </script>
    </head>
    <body>
        <div id="box" style=" 100px;height: 100px;background:#ccc"></div>
    </body>
    </html>

    通过css函数技能获取样式也能修改样式,其前提是基于获取的HTML对象obj

       function css(obj){
                alert(arguments[0]);
                if (arguments.length==2) {
                    return arguments[0].style[arguments[1]]; //获取样式
                }else
                {
                    arguments[0].style[arguments[1]] = arguments[2]; //修改样式
                }
            }

    为了使用方便,提升函数的通用性,可以将该函数进一步优化,增加obj,name,value参数

        //css样式获取和修改方法,两个参数时,获取;三个参数时修改
            function css(obj,name,value){
                // alert(arguments[0]); //arguments[0]=obj
                if (arguments.length==2) {
                    return obj.style[name];  //获取样式
                }else
                {
                    obj.style[name] = value;  //修改样式
                }
            }

    非行间样式:obj.style.属性  方式并不适用与非行间样式

    “好东西一般不兼容”

    在用currentStyle() 与getComputedStyle() 获取非行间样式时需要考虑兼容性问题,而浏览器的兼容性问题一般都是通过if..else条件语句实现。

    obj.currentStyle[attr] 兼容IE6、7、8 
    getComputedStyle(obj,false)[attr] 不兼容IE6、7、8 

        //获取样式
            function getStyle(obj){
                alert(obj.currentStyle);//考虑兼容性问题
                if (obj.currentStyle) {
                    alert(obj.currentStyle.width);
                }else{
                    alert(getComputedStyle(obj,false).width);
                }
            }

    优化该函数后如下:

        //获取样式
            function getStyle(obj,name){
                // alert(obj.currentStyle);//考虑兼容性问题
                if (obj.currentStyle) {
                    return obj.currentStyle[name];
                }else{
                    return getComputedStyle(obj,false)[name];
                }
            }

    但是currentStyle() 与getComputedStyle() 方式只能用于获取样式,而不能设置样式

    此外:

    currentStyle()方式只能获取简单样式(height,width等),不能用于获取复合样式(border,background)等,若需要获取背景颜色,可以用backgroundcolor

     总结:

    1.行内样式:obj.style.属性

    2.非行内样式:obj.currentStyle[attr] 兼容IE6、7、8 
    getComputedStyle(obj,false)[attr] 不兼容IE6、7、8 

     3.兼容性问题基本上都是通过if...else条件语句实现

    4.currentStyle()方式不能获取复合样式。

  • 相关阅读:
    系统结构实践——第一次作业
    个人作业——软件工程实践总结作业
    个人作业——软件评测
    软件工程第五次作业--结队编程
    软件工程第四次作业--结队作业
    第一次个人编程作业
    第一次软工作业
    java第五周上机练习
    Java作业5
    java4
  • 原文地址:https://www.cnblogs.com/allencxw/p/8796964.html
Copyright © 2011-2022 走看看