• 前端学习(48)~通过style对象获取和设置行内样式


    style属性的获取和修改

    在DOM当中,如果想设置样式,有两种形式:

    • className(针对内嵌样式)

    • style(针对行内样式)

    这篇文章,我们就来讲一下style。

    需要注意的是:style是一个对象,只能获取行内样式,不能获取内嵌的样式和外链的样式。例如:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
            div {
                border: 6px solid red;
            }
        </style>
    </head>
    <body>
    
        <div class="box1" style=" 200px;height: 100px;background-color: pink;"></div>
    
        <script>
            var box1 = document.getElementsByTagName("div")[0];
    
            console.log(box1.style.backgroundColor);
            console.log(box1.style.border);  //没有打印结果,因为这个属性不是行内样式
            console.log(typeof box1.style);  //因为是对象,所以打印结果是Object
            console.log(box1.style);         //打印结果是对象
        </script>
    </body>
    </html>

    上图显示,因为border属性不是行内样式,所以无法通过style对象获取。

    通过 js 读取元素的样式

    语法:(方式一)

        元素.style.样式名

    备注:我们通过style属性读取的样式都是行内样式

    语法:(方式二)

        元素.style["属性"];  //格式
    
        box.style["width"];  //举例

    方式二最大的优点是:可以给属性传递参数

    通过 js 设置元素的样式

    语法:

        元素.style.样式名 = 样式值;

    举例:

        box1.style.width = "300px";
        box1.style.backgroundColor = "red"; // 驼峰命名法

    备注:我们通过style属性设置的样式都是行内样式,而行内样式有较高的优先级。但是如果在样式中的其他地方写了!important,则此时!important会有更高的优先级。

    style属性的注意事项

    style属性需要注意以下几点:

    (1)样式少的时候使用。

    (2)style是对象。我们在上方已经打印出来,typeof的结果是Object。

    (3)值是字符串,没有设置值是“”。

    (4)命名规则,驼峰命名。

    (5)只能获取行内样式,和内嵌和外链无关。

    (6)box.style.cssText = “字符串形式的样式”。

    cssText这个属性,其实就是把行内样式里面的值当做字符串来对待。在上方代码的基础之上,举例:

        <script>
            var box1 = document.getElementsByTagName("div")[0];
    
            //通过cssText一次性设置行内样式
            box1.style.cssText = " 300px;height: 300px;background-color: green;";
    
            console.log(box1.style.cssText);   //这一行更加可以理解,style是对象
    
        </script>

    style的常用属性

    style的常用属性包括:

    • backgroundColor

    • backgroundImage

    • color

    • width

    • height

    • border

    • opacity 设置透明度 (IE8以前是filter: alpha(opacity=xx))

    注意DOM对象style的属性和标签中style内的值不一样,因为在JS中,-不能作为标识符。比如:

    • DOM中:backgroundColor

    • CSS中:background-color

    style属性的举例

    我们针对上面列举的几个style的样式,来举几个例子:

    • 举例1、改变div的大小和透明度

    • 举例2、当前输入的文本框高亮显示

    • 举例3、高级隔行变色、高亮显示

    下面来逐一实现。

    举例1:改变div的大小和透明度

     1 <body>
     2 <div style=" 100px;height: 100px;background-color: pink;"></div>
     3 <script>
     4 
     5     var div = document.getElementsByTagName("div")[0];
     6     div.onmouseover = function () {
     7         div.style.width = "200px";
     8         div.style.height = "200px";
     9         div.style.backgroundColor = "black";
    10         div.style.opacity = "0.2";   //设置背景色的透明度。单位是0.1
    11         div.style.filter = "alpha(opacity=20)";   //上一行代码的兼容性写法。注意单位是百进制
    12     }
    13 
    14 </script>
    15 
    16 </body>
    View Code

    举例2:当前输入的文本框高亮显示

     1 <!DOCTYPE html>
     2 <html>
     3 <head lang="en">
     4     <meta charset="UTF-8">
     5     <title></title>
     6     <style>
     7         input {
     8             display: block;
     9         }
    10     </style>
    11 
    12 </head>
    13 
    14 <body>
    15 <ul>
    16     <input type="text"/>
    17     <input type="text"/>
    18     <input type="text"/>
    19     <input type="text"/>
    20     <input type="text"/>
    21 </ul>
    22 <script>
    23     //需求:让所有的input标签获取焦点后高亮显示
    24 
    25     //1.获取事件源
    26     var inpArr = document.getElementsByTagName("input");
    27     //2.绑定事件
    28     //3.书写事件驱动程序
    29     for (var i = 0; i < inpArr.length; i++) {
    30         //获取焦点后,所有的input标签被绑定onfocus事件
    31         inpArr[i].onfocus = function () {
    32             this.style.border = "2px solid red";
    33             this.style.backgroundColor = "#ccc";
    34         }
    35         //绑定onblur事件,取消样式
    36         inpArr[i].onblur = function () {
    37             this.style.border = "";
    38             this.style.backgroundColor = "";
    39         }
    40     }
    41 </script>
    42 </body>
    43 </html>
    View Code

    举例3:高级隔行变色、高亮显示

    <!DOCTYPE html>
    <html>
    <head lang="en">
        <meta charset="UTF-8">
        <title></title>
        <style>
            * {
                padding: 0;
                margin: 0;
                text-align: center;
            }
    
            .wrap {
                width: 500px;
                margin: 100px auto 0;
            }
    
            table {
                border-collapse: collapse;
                border-spacing: 0;
                border: 1px solid #c0c0c0;
                width: 500px;
            }
    
            th,
            td {
                border: 1px solid #d0d0d0;
                color: #404060;
                padding: 10px;
            }
    
            th {
                background-color: #09c;
                font: bold 16px "微软雅黑";
                color: #fff;
            }
    
            td {
                font: 14px "微软雅黑";
            }
    
            tbody tr {
                background-color: #f0f0f0;
                cursor: pointer;
            }
    
            .current {
                background-color: red !important;
            }
        </style>
    </head>
    <body>
    <div class="wrap">
        <table>
            <thead>
            <tr>
                <th>序号</th>
                <th>姓名</th>
                <th>课程</th>
                <th>成绩</th>
            </tr>
            </thead>
            <tbody id="target">
            <tr>
                <td>
                    1
                </td>
                <td>生命壹号</td>
                <td>语文</td>
                <td>100</td>
    
            </tr>
            <tr>
                <td>
                    2
                </td>
                <td>生命贰号</td>
                <td>日语</td>
                <td>99</td>
            </tr>
            <tr>
                <td>
                    3
                </td>
                <td>生命叁号</td>
                <td>营销学</td>
                <td>98</td>
            </tr>
            <tr>
                <td>
                    4
                </td>
                <td>生命伍号</td>
                <td>数学</td>
                <td>90</td>
            </tr>
            <tr>
                <td>
                    5
                </td>
                <td>许嵩</td>
                <td>英语</td>
                <td>96</td>
            </tr>
            <tr>
                <td>
                    6
                </td>
                <td>vae</td>
                <td>体育</td>
                <td>90</td>
            </tr>
            </tbody>
        </table>
    </div>
    
    <script>
        //需求:让tr各行变色,鼠标放入tr中,高亮显示。
    
        //1.隔行变色。
        var tbody = document.getElementById("target");
        var trArr = tbody.children;
        //循环判断并各行赋值属性(背景色)
        for (var i = 0; i < trArr.length; i++) {
            if (i % 2 !== 0) {
                trArr[i].style.backgroundColor = "#a3a3a3";
            } else {
                trArr[i].style.backgroundColor = "#ccc";
            }
    
            //鼠标进入高亮显示
            //难点:鼠标移开的时候要回复原始颜色。
            //计数器(进入tr之后,立刻记录颜色,然后移开的时候使用记录好的颜色)
            var myColor = "";
            trArr[i].onmouseover = function () {
                //赋值颜色之前,先记录颜色
                myColor = this.style.backgroundColor;
                this.style.backgroundColor = "#fff";
            }
            trArr[i].onmouseout = function () {
                this.style.backgroundColor = myColor;
            }
        }
    
    
    </script>
    
    
    </body>
    </html>

    通过 js 获取元素当前显示的样式

    我们在上面的内容中,通过元素.style.className的方式只能获取行内样式。但是,有些元素,也写了内嵌样式或外链样式。

    既然样式有这么多种,那么,如何获取元素当前显示的样式(包括行内样式、内嵌样式、外链样式)呢?我们接下来看一看。

    获取元素当前正在显示的样式

    (1)w3c的做法:

        window.getComputedStyle("要获取样式的元素", "伪元素");

    两个参数都是必须要有的。参数二中,如果没有伪元素就用 null 代替(一般都传null)。

    (2)IE和opera的做法:

      obj.currentStyle;

    注意:

    • 如果当前元素没有设置该样式,则获取它的默认值。

    • 该方法会返回一个对象,对象中封装了当前元素对应的样式,可以通过对象.样式名来读取具体的某一个样式。

    • 通过currentStyle和getComputedStyle()读取到的样式都是只读的,不能修改,如果要修改必须通过style属性。

    综合上面两种写法,就有了一种兼容性的写法,同时将其封装。代码举例如下:

    <!DOCTYPE html>
    <html>
    <head lang="en">
        <meta charset="UTF-8">
        <title></title>
        <style>
            div {
                background-color: pink;
                /*border: 1px solid #000;*/
                padding: 10px;
            }
        </style>
    </head>
    <body>
    
    <div style=" 100px;height: 100px;"></div>
    
    <script>
    
        var div1 = document.getElementsByTagName("div")[0];
    
        console.log(getStyle(div1, "width"));
        console.log(getStyle(div1, "padding"));
        console.log(getStyle(div1, "background-color"));
    
        /*
         * 兼容方法,获取元素当前正在显示的样式。
         * 参数:
         *      obj     要获取样式的元素
         *.     name    要获取的样式名
        */
        function getStyle(ele, attr) {
            if (window.getComputedStyle) {
                return window.getComputedStyle(ele, null)[attr];
            }
            return ele.currentStyle[attr];
        }
    
    </script>
    </body>
    </html>
  • 相关阅读:
    高可用
    网络线之坑:线序接错了,导致时常出现“未识别的网络”
    Cocos2d-x 坑之一:Xcode文件真实目录与工程视图目录
    【转】ios中@class和 #import 的使用时机
    virtualenv 模块
    pipreqs 组件
    5.15 pymysql 模块
    5.14 数据库函数,流程控制
    5.13 数据库存储过程
    5.12 数据库事务
  • 原文地址:https://www.cnblogs.com/Vincent-yuan/p/12466312.html
Copyright © 2020-2023  润新知