JavaScript高手之路:封装css方法和Table表格

Posted 「已注销」

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaScript高手之路:封装css方法和Table表格相关的知识,希望对你有一定的参考价值。

上一章节已经讲了JS定义类的两种方式,并尝试着封装了两个类,这一章节我们来封装两个与页面特效相关的类。第一个是仿jQuery的css方法来操作div的样式,第二个是封装一个table表格对象。

字面量封装css方法

前面已经讲解如何通过字面量来定义对象,下面我们就通过字面量的方式来封装css方法,首先在body标签里面定义一个div

<div id="box"></div>

然后给这个div加上样式

        #box 
            width: 200px;
            height: 200px;
            background-color: red;
        

上诉代码的就定义了一个div,并将该div的长宽设置为200px,并且把背景颜色设置为红色,页面效果如图:

接下来我们定义一个Util工具类,该类具有$()方法和css()方法,$()方法的作用是返回给定id的div对象,而css的作用是设置/获取div对象的属性值。

Util工具类的代码如下:

        var Util = 
            //根据id获取dom节点
            $:function(id) 
                return document.getElementById(id);
            ,
            css:function (object, name, value) 
                if(arguments.length == 2)  //如果参数个数等于2,则获取参数值
                    //判断浏览器类型
                    if(object.currentStyle) //属于IE浏览器
                        return object.currentStyle[name];
                     else  //非IE内核
                        return getComputedStyle(object, false)[name];
                    
                 else if(arguments.length == 3)  //如果参数个数等于3,则设置参数值
                    object.style[name] = value;
                
            
        

$()的实现方式很简单,调用了JS自有对象document的getElementById()方法来获取节点。然后css方法中定义了3个参数,分别是object、name和value,第一个参数是Dom节点对象,第二个参数是属性名,第三个参数是属性值。通过判断参数的长度arguments.length来判断是设置属性值还是获取属性值,其中在获取属性值的时候还需要判断浏览器类型。如果是IE浏览器则使用object.currentStyle[name]来获取属性值,如果是非IE浏览器则用getComputedStyle(object, false)[name]来获取属性值。

测试的代码如下:

        window.onload = function () 
            var obj = Util.$("box");
            Util.css(obj, "width", "250px"); //设置div长度为300px
            Util.css(obj, "height", "300px");//设置div宽度为300px
            console.log("box的width属性:" + Util.css(obj, "width"));
            console.log("box的height属性:" + Util.css(obj, "height"));
        

这里我们没有引入js文件,也就是说没有引入任何框架,那个window.onload定义的方法是当页面加载完毕的时候执行函数里面的代码。函数体里面首先通过Util.$(‘box’)传入id来获取节点,然后通过Util.css()将该节点的长度和宽度分别设置为250px和300px。刷新一下你的浏览器,看看刚才那个红色的Div长和宽是不是变化啦?

后面两行console.log的作用是在控制台输出刚才我们赋值的div的属性,分别输出节点的长度和宽度。如果不出意外,你的浏览器控制台将输出如下:

box的width属性:250px
box的height属性:300px

字面量封装Table表格

接下来我们来封装一个表格对象,该对象能根据rows和cols属性动态生成table表格。该对象的uml类图大致如下

Table对象有一个类成员变量args,该变量记录了rows和cols属性,而args是通过init方法来赋值的。

        var Table = 
            args:,    //定义了args成员变量
            init:function()    //init初始化函数
                this.args = arguments[0];  
            
        ;

那个showTable()函数的作用是循环在页面输出table表格

            showTable:function() 
                document.write("<table>");
                for(var i = 0; i < this.args.rows; i++)   //第一层循环输出tr行
                    document.write("<tr >");
                        for(var j = 0; j < this.args.cols; j++)   //第二层循环,输出td
                            document.write("<td>第"+(i+1)+"行,第"+(j+1)+"列</td>");
                        
                    document.write("</tr>")
                
                document.write("</table>");
            

这里可以看到我用了两层循环,第一层的作用是输出tr标签,第二层循环的作用是输出td标签以及td标签里面的内容,别忘了在循环前和循环后输出table标签本身。完整的Table表格类代码封装如下:

        var Table = 
            args:,
            init:function() 
                this.args = arguments[0];
            ,
            showTable:function() 
                document.write("<table>");
                for(var i = 0; i < this.args.rows; i++)   //第一层循环输出tr行
                    document.write("<tr >");
                        for(var j = 0; j < this.args.cols; j++)   //第二层循环,输出td
                            document.write("<td>第"+(i+1)+"行,第"+(j+1)+"列</td>");
                        
                    document.write("</tr>")
                
                document.write("</table>");
            
        ;

这里还需要给我们的表格添加一点样式,不然待会儿表格的边框出不来,无法直观的观察效果。

    <style>
        table 
            border-collapse: collapse;
        
        th, td 
            border: 1px solid #000000;
            padding: 5px 10px;
        
    </style>

测试代码:

        Table.init(rows:3,cols:3);
        Table.showTable();


我的测试代码Table.init(rows:3,clos:3)让该对象拥有3行3列,然后调用Table.showTable()在页面绘制出该表格,你可以改变这个参数来测试一下封装的对象哦。

以上是关于JavaScript高手之路:封装css方法和Table表格的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript高手之路:封装抽奖效果

JavaScript高手之路:构造函数方式封装对象

JavaScript高手之路:选项卡的封装

JavaScript高手之路:选项卡的封装

JavaScript高手之路:对象的定义以及封装

[js高手之路]javascript腾讯面试题学习封装一个简易的异步队列