• 《DOM Scripting》学习笔记-——第九章 CSS-DOM


    本章内容:

    一、style属性

    二、如何检索样式信息

    三、如何改变样式

    属性:

    包含位置信息:parentNode , nextSibling , previousSibling , childNodes , firstChild , lastChild

    包含元素本身信息:nodeType,nodeName

    包含元素样式信息:style

    举例:

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
    "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
    <head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
    <title>Example</title>
    <script type="text/javascript">
    window.onload = function() {
    var para = document.getElementById("example");
    alert(typeof para.nodeName);
    alert(typeof para.style);
    }
    </script>
    </head>
    <body>
    <p id="example" style="color: grey; font-family:
    ➥ 'Arial',sans-serif;">
    An example of a paragraph
    </p>
    </body>
    </html>

    第一条alert语句返回字符串“string”,表明nodeName属性(p)是一个字符串

    第二条alert语句将返回字符串“object”,表明style属性是一个对象。

    所以说,不仅文档里的每个元素都是一个对象,他们的style属性也是一个对象。

    一、style属性

    1、样式信息的检索

    通过style属性检索:element.style.property

    注:CSS中的连字符与js中的减法操作符相同,js会把它解释为减号。在DOM中,采用“Camel”记号来表示。例如css的background-color以及font-weight分别对应DOM中的backgroundColor及fontWeight

    局限性:style属性只能返回那些内嵌在html内容里的样式信息。

    2、设置样式信息

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
    "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
    <head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
    <title>Man bites dog</title>
    </head>
    <body>
    <h1>Hold the front page</h1>
    <p>This first paragraph leads you in.</p>
    <p>Now you get the nitty-gritty of the story.</p>
    <p>The most important information is delivered first.</p>
    <h1>Extra! Extra!</h1>
    <p>Further developments are unfolding.</p>
    <p>You can read all about it here.</p>
    </body>
    </html>

    element.style.property = value

    style对象的各个属性值永远是一个字符串。所以,属性值必须放在引号里(单引号或双引号均可)。如果忘记使用引号,js将把等号右边的值解释为一个变量

    二、何时该用DOM脚本去设置样式信息

    1、根据元素在节点树里的位置来设置

    用CSS声明样式信息的具体做法:

    (1)、为同类型的所有元素统一的声明一种样式

         p{ font-size:1em; }

    (2)、为有特定class属性的所有元素统一声明一种样式

        .fineprint{font-size:.8em;}

    (3)为某个有着独一无二的id属性的元素单独声明一种样式

        #intro{font-size:1.2em;}

    CSS无法根据元素之间的相对位置关系找出某个特定的元素来。使用DOM方法:

    function styleHeaderSiblings() {
    if (!document.getElementsByTagName) return false;
    var headers = document.getElementsByTagName("h1");
    for (var i=0; i<headers.length; i++) {
    var elem = getNextElement(headers[i].nextSibling);
    elem.style.fontWeight = "bold";
    elem.style.fontSize = "1.2em";
    }
    }
    function getNextElement(node) {
    if(node.nodeType == 1) {
    return node;
    }
    if (node.nextSibling) {
    return getNextElement(node.nextSibling);
    }
    return null;
    }

    h1的nextsibling只有一个,就是紧邻的第一个p

    2、根据某种条件设置样式信息

    Html代码:

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
    "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
    <head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
    <title>Cities</title>
    </head>
    <body>
    <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>
    </body>
    </html>

    Css代码:

    body {
    font-family: "Helvetica","Arial",sans-serif;
    background-color: #fff;
    color: #000;
    }
    table {
    margin: auto;
    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;
    }
    th,td {
    width: 10em;
    padding: .5em;
    }

    目的:交替改变各行数据颜色,使表格更为清晰

    Js代码:

    function stripeTables() {
    if (!document.getElementsByTagName) return false;
    var tables = document.getElementsByTagName("table");
    for (var i=0; i<tables.length; i++) {
    var odd = false;
    var rows = tables[i].getElementsByTagName("tr");
    for (var j=0; j<rows.length; j++) {
    if (odd == true) {
    rows[j].style.backgroundColor = "#ffc";
    odd = false;
    } else {
    odd = true;
    }
    }
    }
    }

    3、对事件作出响应

    下面这个函数将在鼠标指针悬停在某个表格行的上方时,把该行文本显示为黑体字

    function highlightRows() {
    if(!document.getElementsByTagName) return false;
    var rows = document.getElementsByTagName("tr");
    for (var i=0; i<rows.length; i++) {
    rows[i].onmouseover = function() {
    this.style.fontWeight = "bold";
    }
    rows[i].onmouseout = function() {
    this.style.fontWeight = "normal";
    }
    
    }
    }
    addLoadEvent(highlightRows);

    className属性

    用DOM直接设置或修改样式信息的做法并不值得推荐,因为这是让“行为层”去完成“表示层”的工作。解决方案:与其使用DOM脚本去直接改变某个元素的样式信息,不如通过js代码去刷新这个元素的class属性。

    对函数进行抽象化:把具体的值转换为这个函数的参数,使函数成为一个更通用的函数。

  • 相关阅读:
    根据W3C总结Ajax基础技术
    MVC中ActionName标记属性的用法
    为什么做网站一般不用服务端控件?
    Jquery两个比较常用的方法each和data
    MVC中的路由
    SQL中获取刚插入记录时对应的自增列的值
    第一个文章,今天比较兴奋啊! 给大家一个关于SQL复合查询的文章(动态生成多个where条件)
    获取 汉字的首字母(例如张三返回zs)核心方法chinesecap()
    ASP.NET中判断密码的安全度(低,中,高)
    C# 关于密码加密 (转载)
  • 原文地址:https://www.cnblogs.com/yangfang228/p/6095495.html
Copyright © 2020-2023  润新知