zoukankan      html  css  js  c++  java
  • JavaScript之Style属性学习

    当CSS使用伪类开始侵入DOM和JavaSCript所控制着的行为层时,DOM和JavaScript也使用他们的一系列样式去控制表现层,这篇随笔主要说的就是利用JavaScript去控制元素的表现形式,

    一、Style属性

    文档中的每一个元素都是一个对象,每个对象又有着各式各样的属性。有一些元素告诉我们元素在节点树上的位置信息。比如说,parentNode、nextSibling、previousSibling、childNodes、

    firstChild、lastChild这些属性,就告诉了我们文档中各节点的之间的关系信息。又有一些属性比如nodeType、nodeName、nodeValue(这个属性注意只能获取文本元素节点的节点值)这些属性,告诉我们元素本身的信息。

    除此之外,文档的每个元素都还有一个属性style。style属性包含着元素的样式,查询这个属性返回的是一个对象而不是一个简单的字符串。样式都存放在这个style对象的属性里。

    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title></title>
        <script src="js/utility.js" type="text/javascript"></script>
        <script src="js/jquery-1.9.1.min.js" type="text/javascript"></script>
        <style  type="text/css">
        p
        {
          color:blue;
            }
        </style>
        
    </head>
    <body>
    <p>asdas</p>
    <script type="text/javascript">
        window.onload = function () {
            var para = document.getElementsByTagName("p")[0];
            alert(typeof para.style);
        }
    </script>
    </body>
    </html>

    输出:object;  说明style属性确实是一个对象;

    这样我们就可以使用DOM的style属性去获取对应元素对象的style属性了,但是这里必须注意,必须谨记的一个地方,DOM 的style属性只能获取html标签内内嵌的style属性像下面代码这样:

    <p style="color:Blue; font-size:16px;">asdas</

    使用Style属性的注意点一:

    如果标签的样式被定义在了外部文件里面,DOM将获取不到外部文件里面的style属性值。牢记这点很重要;

    也许有人会认为那么这个DOM的style属性将没有任何的实用价值,应为我们在开发中一般会将表现和样式分离,几乎都会将样式表放入到外部css文件里面,这个时候就看你怎么使用DOM的style属性了,因为虽然我们无法获取外部文件里面的style属性,但是我们可以获取我们给DOM设置的样式,也就是说DOM的style属性不仅可以获取元素的style属性,还能给元素设置style属性,而我们给元素设置的style属性我们可以用DOM的style属性来获取。

    使用Style属性的注意点二:

    当我们使用Style属性去获取像font-weight和font-family这类的属性时,不能这些获取

    目标元素.style.font-weight 

    应为你如果这样获取,JavaScript解释器会把font-weight中间的‘-’当作减号来看那上面这句代码的意思就变成(目标元素.style.font)减去weight变量的值,这将完全违背我们的本意.

    所以这边DOM有相关的处理方法,当你需要引用一个中间带减号的css属性时,DOM要求你用驼峰命名法。css属性font-family编程fontFamily,其他类似的属性也用相同的方法操作。

    二、Style属性实战

    介绍完style属性之后,下面开始上代码了,代码如下

    html:

    html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title></title>
        <style type="text/css">
            body
            {
                font-family: "Helvetaica" , "Arial" ,sans-serif;
                background-color: #fff;
                color: #000;
            }
            table
            {
                margin: 0;
                border: 1px solid #699;
            }
            caption
            {
                margin:auto;
                padding:.2em;
                font-size:1.2em;
                font-weight:bold;
            }
            th
            {
                font-weight:normal;
                font-style:italic;
                text-align:left;
                border:1px dotted #699;
                background-color:#9cc;
                color:#000;
                }
                tr
                {
                 cursor:pointer;}
                th,td
                {
                    width:10em;
                    padding:.5em;
                    }
        </style>
    </head>
    <body>
        <div>---------</div>
        <table>
            <caption>
                Itinerary(旅程,路线)</caption>
            <thead>
                <tr>
                    <th>
                        When
                    </th>
                    <th>
                        Where
                    </th>
                </tr>
            </thead>
            <tbody>
                <tr>
                    <td>
                        June 9th
                    </td>
                    <td>
                        Portland,<abbr title="Oregon">OR</abbr>
                    </td>
                </tr>
                <tr>
                    <td>
                        June 10th
                    </td>
                    <td>
                        Seattle,<abbr title="Washington">WA</abbr>
                    </td>
                </tr>
                <tr>
                    <td>
                        June 12th
                    </td>
                    <td>
                        Sacramento,<abbr title="California">CA</abbr>
                    </td>
                </tr>
            </tbody>
        </table>
        <div>---------</div>
        <div>---------</div>
        <script src="../js/utility.js" type="text/javascript"></script>
        <script src="../js/index.js" type="text/javascript"></script>
        <script type="text/javascript">
            var insertposition = document.getElementsByTagName("div")[1];//指定缩略语列表的插入位置
            displayAbbreviations(insertposition);
            var loadeventlist = [stripeTable,displayAbbreviations];//将两个js方法放入window.onload队列里面
            addOnloadEventlist(loadeventlist);
        </script>
    </body>
    </html>

    js代码:

    //设置表格各种特性
    function stripeTable() {
        if (!checkCompatibility) return;
        var tables = document.getElementsByTagName("table");
        for (var i = 0; i < tables.length; i++) {
            var rows = tables[i].getElementsByTagName("tr");
            alert(rows[0].innerHtml);
            var flag = false;
            for (var j = 0; j < rows.length; j++) {
            //表格隔行变色效果逻辑
                if (flag == true) {
                    rows[j].style.backgroundColor = "#ffc";
                    flag = false;
                }
                else {
                    flag = true;
                }
                //鼠标放上去当前行文本加黑加粗
                rows[j].onmouseover = function () {
                    this.style.fontWeight = "bold";
                }
                rows[j].onmouseout = function () {
                    this.style.fontWeight = "normal";
                }
            }
        }
    }
    
    /*
    检查浏览器的兼容性,是否支持查用的DOM方法
    check the compatibility of the broswer
    */
    function checkCompatibility() {
        if (!document.getElementById) return false;
        if (!document.createElement) return false;
        if (!document.createTextNode) return false;
        if (!document.getElementsByTagName) return false;
        if (!document.getElementsByName) return false;
        return true;
    }
    /*
    addOnloadEvent的扩展版因为每次添加一个函数都需要调用addOnloadEvent()函数,所以为了节省代码,将需要绑定的函数名写入到一个数组里面,
    然后将数组引用,传递给addOnloadEventlist();每次添加,只需将函数名,写到数组里面即可
    @param eventlist  -需要与window.onload事件绑定的函数名数组
    */
    function addOnloadEventlist(eventlist) {
        if (!eventlist) return false;
        var oldonload = window.onload;
        window.onload = function () {
            for (var i = 0; i < eventlist.length; i++) {
                eventlist[i]();
            }
        }
    }

    说下效果:简单实现table表格的隔行变色,和当鼠标在数据行上悬浮时,数据加黑加粗显示;

    实现这个效果的关键是如下代码:

     rows[j].style.backgroundColor = "#ffc";  //当前行的背景色变成#ffc
     this.style.fontWeight = "bold"; //当前行的字体颜色加粗
     this.style.fontWeight = "normal"; //当前行的字体从加粗变为正常

    这三段代码分别利用style属性设置了当我们的动作发生时,table表格相应的会做那些变化;

    但是我们仔细思考下,如果这里有一天我们的需求变了,这个表格隔行变色的背景色了,我们要换个颜色,这时候我们又要来修改js代码,而且这不是关键,关键是如果我们还需要加其他的显示效果,这个时候为了加这个效果,我们必须在加一行代码,所以这种方式添加效果的方式并不是很好。所以这个时候如果把Css和JavaScript结合往往能产生很好的效果,关于这个你可以去我的下一个随笔关于className属性的介绍http://www.cnblogs.com/GreenLeaves/p/5757216.html

    这篇随笔就是教我们如何通过DOM的className属性来减少我们对控制元素样式的代码量。

  • 相关阅读:
    Spring基础知识
    Hibernate基础知识
    Struts2基础知识
    在eclipse里头用checkstyle检查项目出现 File contains tab characters (this is the first instance)原因
    java后台获取cookie里面值得方法
    ckplayer 中的style.swf 中的 style.xml 中的修改方法
    java hql case when 的用法
    Windows下Mongodb安装及配置
    Mongodb中经常出现的错误(汇总)child process failed, exited with error number
    Mac 安装mongodb
  • 原文地址:https://www.cnblogs.com/GreenLeaves/p/5753942.html
Copyright © 2011-2022 走看看