• JavaScript网站设计实践(六)编写live.html页面 改进表格显示


    一、编写live.html页面,1、JavaScript实现表格的隔行换色,并且当鼠标移过时当前行高亮显示;2、是输出表格中的abbr标签的内容

    实现后的效果图是这样的:

    1、实现思路

    在输出表格的时候,给出一个判断,如果偶数或是奇数行我们想换色,则添加一个class为odd的值,在这个class里就设置了表格不同颜色tr行。

    这里用到了一个判断函数:(下面是两个不同的方法,任选其一)

    法一:
    //
    隔行换色 添加class属性 for(var i =0; i<tables.length; i++){ var odd = false; var rows = tables[i].getElementsByTagName("tr"); //获取表格里的函数rows for(var j=0; j<rows.length; j++){ if(odd == true){ addClass(rows[j],"odd"); odd = false; }else{ odd = true; } } }
    法二:
    for
    (var i =0; i<tables.length; i++){ var rows = tables[i].getElementsByTagName("tr"); //获取表格里的函数rows for(var j=0; j<rows.length; j++){ if(j%2 == 0){ addClass(rows[j],"odd"); //偶数行时,添加class为odd的值 } } }

    法一中,是使用一个odd标识来实现隔行换色,刚开始设置odd表示为false,然后进入循环后,判断,如果odd是true则添加class为odd的值,否则则设置为true,这样在第二次循环时,读到的便是odd=true,读到是true后,又设置为false,这样在下次读取又是false,就不设置class =odd,就达到了隔行设置class=odd,实现隔行换色。

    法二中,更直接。判断第二次循环的参数j,与2取模后,结果是否0来确定是否添加class = odd。

    2、代码

    (1)首先,把template.html中的代码拷贝到live.html中,将div 的id为content的部分,写入如下:

    <h1> Tour dates</h1>
                <table summary="when and where you can see the band">
                    <thead>
                        <tr>
                            <th>Date</th>
                            <th>City</th>
                            <th>Venue</th>
                        </tr>
                    </thead>
                    <tbody>
                        <tr>
                            <td>June 9th</td>
                            <td>Portland,<abbr title="Oregon">OR</abbr></td>
                            <td>Crystal Ballroom</td>
                        </tr>
                        <tr>
                            <td>June 9th</td>
                            <td>Portland,<abbr title="Washington">WA</abbr></td>
                            <td>Crystal Ballroom</td>
                        </tr>
                        <tr>
                            <td>June 9th</td>
                            <td>Portland,<abbr title="California">CA</abbr></td>
                            <td>Crystal Ballroom</td>
                        </tr>
                        <tr>
                            <td>June 9th</td>
                            <td>Portland,<abbr title="Texas">TX</abbr></td>
                            <td>Crystal Ballroom</td>
                        </tr>
                        
                    </tbody>
                </table>
    View Code

    (2)然后,修改webdesign.css、color.css、typography.css文件

    td{
        padding: .5em 3em;
    }
    
    /**********live.html*************************/
    dl{
        overflow: hidden;
    }
    dt{
        float: left;
    }
    dd{
        float: left;
    }
    View Code

      

    tr.odd td{
        color: #233;
        background-color: #ec8;
    }
    tr.highlight td{
        color: #223;
        background-color: #cba;
    }
    View Code
    dt{
        margin-right: 1em;
    }
    dd{
        margin-right: 3em;
    }
    View Code

    (3)最后,创建live.js文件,来为页面编写JavaScript效果

    /*******************给表格的偶数行添加样式*********************/
    function stripeTables(){
        //旧浏览器对象检测
        if(!document.getElementsByTagName) return false;
        
        //获取元素
        var tables = document.getElementsByTagName("table");
        
        //隔行换色  添加class属性
        for(var i =0; i<tables.length; i++){
            var odd = false;
            var rows = tables[i].getElementsByTagName("tr");         //获取表格里的函数rows
            for(var j=0; j<rows.length; j++){
                if(odd == true){                                     
                    alert(odd);
                    addClass(rows[j],"odd");
                    odd = false;
                }else{
                    odd = true;
                }
            }
        }
        
        /*for(var i =0; i<tables.length; i++){
            var rows = tables[i].getElementsByTagName("tr");         //获取表格里的函数rows
            for(var j=0; j<rows.length; j++){
                if(j%2 == 0){
                    addClass(rows[j],"odd");                         //偶数行时,添加class为odd的值
                }
            }
        }*/
        
    }
    
    
    /*****************鼠标浮动行高亮显示**************************/
    function highlightRows(){
        //旧浏览器对象检测
        if(!document.getElementsByTagName) return false;
        
        //获取元素
        var rows = document.getElementsByTagName("tr");
        
        //高亮显示    鼠标移上则给这一行动态添加一个新class属性,鼠标移开则重新赋值为原来的class属性
        for(var i=0; i<rows.length; i++){
            rows[i].oldClassName = rows[i].className;            //把tr的class属性保存起来
            rows[i].onmouseover = function(){
                addClass(this,"highlight");                       //鼠标经过时添加clas为highlight的值
            }
            rows[i].onmouseout = function(){
                this.className = this.oldClassName;               //鼠标移开,还原之前的class值
            }
        }
    }
    
    /*****************输出缩略词表********************************/
    function displayAbbreviations(){
        //旧浏览器对象检测
        if(!document.getElementsByTagName || !document.createElement || !document.createTextNode) return false;
        
        //获取元素
        var abbreviation = document.getElementsByTagName("abbr");
        if(abbreviation.length <1) return false;                  //如果没有abbr标签存在,则退出执行;否则,把abbr的title存入关联数组
        var defs = new Array();
        for(var i=0; i<abbreviation.length; i++){
            var current_abbr = abbreviation[i];
            if(current_abbr.childNodes.length<1) continue;        //如果有abbr标签,却没有直接点,说明是没有内容的abbr,则退出本次循环
            var definition = current_abbr.getAttribute("title");  //获取abbr的title属性值
            var key = current_abbr.lastChild.nodeValue;
            alert(key);
            defs[key] = definition;
        }
        
        //输出缩略词的表格
        var dlist = document.createElement("dl");
        for(key in defs){
            var definition = defs[key];
            var dtitle = document.createElement("dt");
            var dtitle_text = document.createTextNode(key);
            dtitle.appendChild(dtitle_text);
            var ddesc = document.createElement("dd");
            var ddesc_text = document.createTextNode(definition);
            ddesc.appendChild(ddesc_text);
            dlist.appendChild(dtitle);
            dlist.appendChild(ddesc);
        }
        
        if(dlist.childNodes.length < 1) return false;
        var header = document.createElement("h3");
        var header_text = document.createTextNode("Abbrviations");
        header.appendChild(header_text);
        
        var container = document.getElementById("content");
        container.appendChild(header);
        container.appendChild(dlist);
    }
    
    
    
    addLoadEvent(stripeTables);
    addLoadEvent(highlightRows);
    addLoadEvent(displayAbbreviations);
    View Code

    ok了。现在打开谷歌浏览器就可以看到隔行换色的表格了。

    二、学与思

    1、设置标志var odd = false;

    这是一个不错的方法,不用像第二个方法那样,进行取模运算,虽然取模运算更容易理解,但是毕竟要计算。

    还未进入循环时,设置为false,进来后if判断,判断为真,添加class= odd后,再次让标志位false,进入到下一次循环中。

    2、节点的创建和挂载。

  • 相关阅读:
    实现一个简易版的react
    浅学virtualDom和diff算法
    148. 排序链表 归并排序 | 快速排序
    OC中的NSDictionary和NSMutableDictionary
    OC中的block
    OC中的category&Extension
    OC中判断方法是否实现
    OC的分组导航标记
    OC中程序的内存分布&类加载
    OC中的@property和@synthesize
  • 原文地址:https://www.cnblogs.com/wuyinghong/p/3734297.html
Copyright © 2020-2023  润新知