资讯专栏INFORMATION COLUMN

JS实现博客前端页面(一)—— 封装基础库

UCloud / 1407人阅读

摘要:创建基本库首先创建一个基本库,名字叫做用于编写最常用的代码,然后不断的扩展封装。

1、创建基本库

首先创建一个基本库,名字叫做base.js,用于编写最常用的代码,然后不断的扩展封装。
在最常用的代码中,最常用的就是获取节点的方法。这里我们可以编写代码如下:

//创建base.js
//整个库可以是一个对象
var Base={
    //方法名尽可能简短而富有意义
    getId:function(id){
        return document.getElementById(id);
    },
    getName:function(name){
        return document.getElementsByName(name);
    },
    getTagName:function(tag){
        return document.getElementsByTagName(tag);
    }
}
//类方法调用
window.onload=function(){
    alert(Base.getId("box").innerHTML);
    alert(Base.getName("chk")[0].value);
    alert(Base.getTagName("p")[0].innerHTML);
};
2、实现连缀语法

即可以使用Base.getId("box").css("color","red").html("标题").click(function(){alert("a")});类似的语句实现对象方法的连续调用
需要在步骤1的基础上改写库对象:

//分析:想要实现连缀语法Base.getId("box").css("color","red").html("标题").click(function(){alert("a")});
//需要在Base类中实现css(),html(),click()方法,且方法都要return一个Base对象
//在Base对象中,一般设置css,innnerHTML,onclick的方法如下
//var base=new Base();    new一个Base类的实例
//base.getId("box").style.color="red";   定义color
//base.getId("box").style.backgroundColor="red";
//base.getId("box").innerHTML="标题";
//base.getId("box").onclick=function(){alert("a")};
//现在需要将上面的设置为Base类的css,html,click方法,

//定义$函数,用于生成多个Base()实例对象,后面需要Base实例时,直接使用$()即可
var $ = function(){
    return new Base();
};
function Base(){
    //使用this关键字创建elements数组,用来保存获取目标节点和节点数组
    this.elements=[];
    //使用this关键字定义获取节点的方法
    this.getId=function(id){
        var e=document.getElementById(id);
        this.elements.push(e);
        return this;
    }
    this.getTagName=function(tag){
        var e=document.getElementsByTagName(tag);
        for(var i in e){
            this.elements.push(e[i]);
        }
        return this;
    }
}
//也可以使用prototy添加Base的原型方法
Base.prototype.css=function(attr,value){
    //对指定节点元素设置属性和值
    for(var i in this.elements){
        this.elements[i].style[attr]=value;
    }
    return this;
}
Base.prototype.html=function(str){
    for(var i in this.elements){
        this.elements[i].innerHTML=str;
    }
    return this;
};
//类方法调用
window.onload=function(){
     //每一个$()为一个对象实例,可调用类中封装好的方法
    $().getId("box").css("color","red").html("title");
    $().getTagName("p").css("color","blue").html("标题");
};
3、CSS的封装 获取行内样式

以上是通过html()方法和css()方法可以设置标题内容和CSS样式,但现在如果想要通过这两个方法获取已将定义好的属性值:类似于:$().getId("box").html(); $().getId("box").css();时是不满足的,现在就需要重写这两个方法。

//分析:要实现方法既能设置传入的参数值,返回Base对象,又能在传入参数为null的情况下返回当前属性值,那只要判断传过来的参数即可:
//如果没有传参数,则函数返回当前属性值,如果传入参数,则需要设置传入的属性值,并返回Base对象,重写的代码如下:
Base.prototype.css=function(attr,value){
    //对指定节点元素设置属性和值
    for(var i in this.elements){
        //使用arguments数组对象获取传入的参数,并判断参数的个数
        if(arguments.length==1){
            return this.elements[i].style[attr];
        }
        this.elements[i].style[attr]=value;
    }
    return this;
}
Base.prototype.html=function(str){
    for(var i in this.elements){
        //使用arguments数组对象获取传入的参数,并判断参数的个数
        if(arguments.length==0){
            return this.elements[i].innerHTML;
        }
        this.elements[i].innerHTML=str;
    }
    return this;
};
//类方法调用
window.onload=function(){
     //每一个$()为一个对象实例,可调用类中封装好的方法
    $().getId("box").css("color","red").html("title");
    //$().getTagName("p").css("color","blue").html("标题");
    alert($().getId("box").html());
    alert($().getId("box").css("color"));
};
获取外部CSS样式

以上获取的css样式,仅是行内的css,如果使用link链接的外部CSS,又该如何处理呢?
这里可以使用W3C 的window.getComputedStyle和IE的currentStyle来获取,更改后的代码如下:

Base.prototype.css=function(attr,value){
    //对指定节点元素设置属性和值
    for(var i in this.elements){
        //使用arguments数组对象获取传入的参数,并判断参数的个数
        if(arguments.length==1){
            if(typeof window.getComputedStyle != "undefined"){//W3C
                return window.getComputedStyle(this.elements[i],null)[attr];
            }else if(typeof this.elements[i].currentStyle != "undefined"){//IE
                return this.elements[i].currentStyle[attr];
            }
        }
        this.elements[i].style[attr]=value;
    }
    return this;
}

以上内容来自李炎恢老师JavaScript课程实战篇笔记整理

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/90920.html

相关文章

  • 前端相关大杂烩

    摘要:希望帮助更多的前端爱好者学习。前端开发者指南作者科迪林黎,由前端大师倾情赞助。翻译最佳实践译者张捷沪江前端开发工程师当你问起有关与时,老司机们首先就会告诉你其实是个没有网络请求功能的库。 前端基础面试题(JS部分) 前端基础面试题(JS部分) 学习 React.js 比你想象的要简单 原文地址:Learning React.js is easier than you think 原文作...

    fuyi501 评论0 收藏0
  • 个人分享--web前端学习资源分享

    摘要:前言月份开始出没社区,现在差不多月了,按照工作的说法,就是差不多过了三个月的试用期,准备转正了一般来说,差不多到了转正的时候,会进行总结或者分享会议那么今天我就把看过的一些学习资源主要是博客,博文推荐分享给大家。 1.前言 6月份开始出没社区,现在差不多9月了,按照工作的说法,就是差不多过了三个月的试用期,准备转正了!一般来说,差不多到了转正的时候,会进行总结或者分享会议!那么今天我就...

    sherlock221 评论0 收藏0
  • 【单页面博客前端到后端】基于 DVA+ANTD 搭建博客前后台界面

    摘要:在的的配置中添加自定义主题由脚手架和官网介绍,我们已经自己配置并新建好了主题文件。单页面博客从前端到后端环境搭建单页面博客从前端到后端基于搭建博客前后台界面单页面博客从前端到后端基于和的权限验证与的设计 在上篇文章我们已经搭建好了基础的开发环境,接下来会介绍如何引入 DVA 和 ANTD ,以及在引入过程中需要注意的问题。这里只会详细的书写部分组件,其他的组件都是大同小异。你可以在 g...

    zqhxuyuan 评论0 收藏0

发表评论

0条评论

UCloud

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<