`

Web前端开发--JavaScript的分层

 
阅读更多

    JavaScript分层

1 . base层

       位于三层的最底端,这一层有俩个职责,职责一是分装不同的浏览器下JavaScript的差异,提供一个统一的接口,可以通过他来完成跨浏览器兼容的工作。职责二是扩展JavaScript语言底层提供的接口,让它提供更多的更为易用的接口。base层的功能是给common层和page层提供接口的。

2 . common层

       位于三层中间,依赖于base层提供的接口。common层提供可供复用的组件,他是典型的mvc模式中的m,和页面内的具体功能没有直接关系,common层的功能是给page层提供组件。

3 . page层

       位于三层的最顶端。这一层和页面的具体功能需求直接关系,是mvc模式中的c,page层依赖于base层和common层。page层的功能是完成页面内的功能需求。

    base层

位于三base层的功能是为common层和page层提供接口。接口由俩部份组成,与这一层的俩个职责对应。职责一是“封装不同浏览器下的JavaScript的差异,提供统一的接口”。 

<u1>
    <1i id="item1"></1i>
    <1i id="item2"></1i>
    <1i id="item3"></1i>
</u1>
<script type="text/JavaScript">  
    var item1=document.getElementById("item1");
    alert (item1.nextSibling.nodeType);
    alert(document.getElementsByTagName("u1")[0].childNodes.length);
</script>  

       在IE下,会弹出1和3,在Firefox下会弹出3和7。Firefox会将空白、换行等文本信息也当做是childNdes中的一员,而IE则忽略它,只将DOM节点当做是childNodes的一员,这样我们的程序就无法兼容IE和Firefox了。

       解决方案一:我们将所有空白换行去掉,IE和Firefox弹出的结果就一致了,但是会绑定HTML的结构让程序和HTML产生了耦合。

       解决方案二:

<u1>
    <1i id="item1"></1i>
    <1i id="item2"></1i>
    <1i id="item3"></1i>
</u1>
<script type="text/JavaScript">  
    var item1=document.getElementById("item1");
    var nextNode=item1.nextSibling;
    //Firefox不支持document.all。这里用以判别浏览器类型
    if(!document.all){
        while(true){
            if(nextNode.nodeType==1){
                break;
            } else{
                if(nextNode.nextsibling){
                    nextNode=nextNode.nextsibling;
                } else {
                     break;
                }
            }
        }
}
alert(nextNode.id);
</script> 

       document.all是IE支持的属性,Firefox不支持,我们先通过document.all判断浏览器的种类,Firefox则取nextSibling时一直往下查,直到找到下一个DOM节点为止。但是这种解决方案缺点也很明显,一它使代码的可读性变差了,二代码的重用性不高。

       解决方案三:

<u1>
    <1i id="item1"></1i>
    <1i id="item2"></1i>
    <1i id="item3"></1i>
</u1>
<script type="text/JavaScript"> 
    function getNextNode(node){
        node=typeof node=="string" ? document.getElement.getElementId(node) : node;
        var nextNode=node.nextSibling;
        if(!nextNode) return null;
        if(!document.all){
            while(true){
                if(nextNode.nodeType==1){
                    break;
                } else{
                    if(nextNode.nextsibling){
                        nextNode=nextNode.nextsibling;
                    } else {
                         break;
                    }
                }
            }
    }
    return nextNode;
};
var nextNode=getNextNode("item1");
alert(nextNode.id);
var nextNode2=getNextNode("item2");
alert(nextNode2.id);
</script> 

       我们先定义了一个函数getNextNode,函数接收DOM节点或者DOM节点的id作为参数,返回我们需要的nextSibing,即在需要的地方调用函数。函数内部对浏览器类型做了if判断,做了大量工作,但他本身充当的是mvc中的m,供c调用,对c来说m内部是透明的,可以反复的调用,提高了代码的重用率,通过函数getNextNode,实现了跨浏览器的兼容,这里的getNextNode函数就是接口。base层作用之一就是提供大量的接口用以屏蔽原生JavaScript在不同浏览器下的差异。

   base的职责二,以及common层page层会在以后的博客中一一讲到.

   (mvc :http://zh.wikipedia.org/zh/MVC)

 

 

 

 

 

 

分享到:
评论

相关推荐

    基于Vue.js框架的Web前端开发工具的设计与实现

    伴随Web开发技术的不断发展,前后端分离开发逐渐成为主流的开发模式,前端开发在整个开发流程中越来越重要,前端开发工作早已不是编写几个简单的静态页面就可以完成的,前端除了需要展示美观的页面,还需要实现...

    编写高质量代码-Web前端开发修炼之道.azw3

    2.1 揭秘前端开发工程师 2.2 欲精一行,必先通十行 2.3 增加代码可读性——注释 2.4 提高重用性——公共组件和私有组件的维护 2.5 冗余和精简的矛盾——选择集中还是选择分散 2.6 磨刀不误砍柴工——前期的...

    web前端常用chrome谷歌浏览器扩展插件

    FeHelper简直就是前端开发人员的神器,它是由国人开发的一款前端工具集合的小插件,插件功能齐全,基本上涵盖了前端从业者经常会使用到的基础功能,使用起来也很顺手。 Wappalyzer展示你访问的网页由什么技术栈所...

    javascript分层概念JS技术理念问题PPT版

    第一届 web rebuild 北京会有个前淘宝前端开发工程师阿当分享的 PPT 在公司团队内部有同事下载的分享,然后看了。 在webrebuild北京站上做的一次分享,总结了一下javascript的分层概念。 这里特别推荐...

    前端框架、模板和手册

    基本的Web前端开发技术,其中包括:CSS、HTML、SEO、DOM、BOM、Ajax、JavaScript等,以及在不同浏览器上的兼容情况、渲染原理和存在的Bug。 网站性能优化、SEO和服务器端的基础知识。 各种工具进行辅助开发。 技术...

    ax5ui-menu:Javascript UI组件-菜单(上下文菜单,内联菜单)

    是Web前端程序包管理器。 是Web前端程序包管理器。 安装bower ,它将安装在bower_components文件夹下以解决插件依赖性。 (您可以更改文件夹位置 ) 建议您使用bower安装。 如果您从未使用过凉亭,请参阅 。 用npm...

    springboot基于web的机动车号牌管理系统_0303173844.zip

    系统采用了分层架构设计,前端使用HTML、CSS和JavaScript进行开发,后端使用SpringBoot进行业务逻辑处理,数据库使用MySQL进行数据存储。这种架构设计使得系统具有良好的可扩展性和可维护性。此外,系统还具有强大的...

    Zoom-Web-Clone:缩放网络克隆功能可进行实时视频通话

    这是Zoom的网络克隆,它使用对等和WebRTC的概念用Javascript制作,该概念是在@ErickWendel的JS专家周培训中指导下制作的。 在应用程序的开发中,可以看到实时通信的概念,包括视频/音频会议室的实现,文件生成和二...

    Ajax-shoppingPro.zip

    前端主要使用javaScript,jquery,AjAX,JSP构建的单页web应用, 通过使用指令,服务,模板,控制器完成前端的MVC分层,各个模板页面的效果实现则使用了基本的CSS3等技术, 结合JS完成页面的基本交互效果。由于有实现...

    最新SpringBoot项目游戏分享网站.zip

    - 前端可能采用了Vue.js等现代JavaScript框架,以提供更好的用户交互体验。 - 数据库选用MySQL,保证了数据的稳定存储和高效访问。 2. **功能模块**: - 系统设计了包括管理员和用户两个角色的管理模块,以及首页、...

    最新SpringBoot项目家具商城系统.zip

    - 前端可能使用了Vue.js或React等现代JavaScript框架,以构建用户友好的交互界面。 - 数据库选用MySQL,保证了数据的稳定存储和高效访问。 2. **功能模块**: - 系统设计了商品管理、订单处理、用户管理、支付系统等...

    最新SpringBoot项目基于Spring Boot的在线考试系统.zip

    - 前端可能使用了Vue.js或React等现代JavaScript框架,以构建用户友好的交互界面。 - 数据库选用MySQL,保证了数据的稳定存储和高效访问。 2. **功能模块**: - 系统设计了试卷管理、试题管理、考生管理、成绩统计等...

    Javaweb仓库管理系统项目源码+数据库+毕业设计

    因为才有比较基础的语法,对Java初学者、基础不是太好的小伙伴来说,也是...最重要的,就是通过比较简单、基础的语法,让你了解用Java怎么开发一个web系统,完整的了解整个开发流程,进而提升学习的信心和增加成就感。

    JAVA毕业设计之基于web的人力资源管理系统的设计与实现(springboot+mysql)完整源码.zip

    基于Web的人力资源管理系统的设计与实现是一个使用Java语言开发的项目,采用了Spring Boot框架和MySQL数据库。该系统主要用于企业或组织的人力资源部门,帮助管理和处理员工信息、部门信息、职位信息等。以下是该...

    最新SpringBoot项目人事管理系统.zip

    - 前端可能采用了Vue.js等现代JavaScript框架,以提供更好的用户交互体验。 - 数据库选用MySQL,保证了数据的稳定存储和高效访问。 2. **功能模块**: - 系统设计了包括人事通讯、员工信息、人事考评、奖惩、培训...

    最新springboot高校食堂移动预约点餐系统.zip

    - 前端可能使用了Vue.js等现代JavaScript框架,以构建用户友好的交互界面。 - 数据库选用MySQL,保证了数据的稳定存储和高效访问。 2. **功能模块**: - 提供用户注册和登录功能,学生和教职工可以通过系统进行注册...

    springboot基于javaweb的影院订票系统的设计与实现.zip

    该系统的前端用户界面采用了HTML、CSS和JavaScript等技术进行开发,实现了用户友好的界面设计和交互效果。后端服务器端代码使用Spring Boot框架进行开发,通过控制器、服务层和数据访问层的分层架构实现了系统的各个...

    JAVA社区网络服务系统(源代码+论文).rar

    通过分析和运行这个系统,学生可以深入理解Java Web开发的关键技术,如Servlet、JSP、JDBC以及前端技术HTML、CSS和JavaScript,同时也能够学习到如何设计数据库和应用分层架构。此外,项目还可能涉及到安全性、性能...

    基于SpringBoot的房屋交易平台的设计与实现.zip

    基于SpringBoot的房屋交易平台的设计与实现是一个面向房地产市场的Web应用程序项目,旨在为用户提供一个简便、高效的在线房屋买卖和租赁服务。该平台充分利用了SpringBoot框架的快速开发特性,结合了MyBatis、MySQL...

    JAVA毕业设计之基于JAVA语言的在线考试与学习交流网页平台(springboot+mysql)完整源码.zip

    这是一个基于JAVA语言的在线考试...通过这个项目,您可以学习到如何使用Java语言和SpringBoot框架进行Web开发,掌握前后端分离的开发模式,熟悉MySQL数据库的使用,以及如何设计和实现一个在线考试与学习交流网页平台。

Global site tag (gtag.js) - Google Analytics