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屬性來減少我們對控制元素樣式的代碼量。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



猜您在找 JavaScript特性(attribute)、屬性(property)和樣式(style) JavaScript特性(attribute)、屬性(property)和樣式(style) JavaScript之ClassName屬性學習 JavaScript基礎---獲取元素的屬性(title,style,width) JavaScript之firstChild屬性、lastChild屬性、nodeValue屬性學習 :style動態設置屬性 JS中style屬性