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)
相关推荐
伴随Web开发技术的不断发展,前后端分离开发逐渐成为主流的开发模式,前端开发在整个开发流程中越来越重要,前端开发工作早已不是编写几个简单的静态页面就可以完成的,前端除了需要展示美观的页面,还需要实现...
2.1 揭秘前端开发工程师 2.2 欲精一行,必先通十行 2.3 增加代码可读性——注释 2.4 提高重用性——公共组件和私有组件的维护 2.5 冗余和精简的矛盾——选择集中还是选择分散 2.6 磨刀不误砍柴工——前期的...
FeHelper简直就是前端开发人员的神器,它是由国人开发的一款前端工具集合的小插件,插件功能齐全,基本上涵盖了前端从业者经常会使用到的基础功能,使用起来也很顺手。 Wappalyzer展示你访问的网页由什么技术栈所...
第一届 web rebuild 北京会有个前淘宝前端开发工程师阿当分享的 PPT 在公司团队内部有同事下载的分享,然后看了。 在webrebuild北京站上做的一次分享,总结了一下javascript的分层概念。 这里特别推荐...
基本的Web前端开发技术,其中包括:CSS、HTML、SEO、DOM、BOM、Ajax、JavaScript等,以及在不同浏览器上的兼容情况、渲染原理和存在的Bug。 网站性能优化、SEO和服务器端的基础知识。 各种工具进行辅助开发。 技术...
是Web前端程序包管理器。 是Web前端程序包管理器。 安装bower ,它将安装在bower_components文件夹下以解决插件依赖性。 (您可以更改文件夹位置 ) 建议您使用bower安装。 如果您从未使用过凉亭,请参阅 。 用npm...
系统采用了分层架构设计,前端使用HTML、CSS和JavaScript进行开发,后端使用SpringBoot进行业务逻辑处理,数据库使用MySQL进行数据存储。这种架构设计使得系统具有良好的可扩展性和可维护性。此外,系统还具有强大的...
这是Zoom的网络克隆,它使用对等和WebRTC的概念用Javascript制作,该概念是在@ErickWendel的JS专家周培训中指导下制作的。 在应用程序的开发中,可以看到实时通信的概念,包括视频/音频会议室的实现,文件生成和二...
前端主要使用javaScript,jquery,AjAX,JSP构建的单页web应用, 通过使用指令,服务,模板,控制器完成前端的MVC分层,各个模板页面的效果实现则使用了基本的CSS3等技术, 结合JS完成页面的基本交互效果。由于有实现...
- 前端可能采用了Vue.js等现代JavaScript框架,以提供更好的用户交互体验。 - 数据库选用MySQL,保证了数据的稳定存储和高效访问。 2. **功能模块**: - 系统设计了包括管理员和用户两个角色的管理模块,以及首页、...
- 前端可能使用了Vue.js或React等现代JavaScript框架,以构建用户友好的交互界面。 - 数据库选用MySQL,保证了数据的稳定存储和高效访问。 2. **功能模块**: - 系统设计了商品管理、订单处理、用户管理、支付系统等...
- 前端可能使用了Vue.js或React等现代JavaScript框架,以构建用户友好的交互界面。 - 数据库选用MySQL,保证了数据的稳定存储和高效访问。 2. **功能模块**: - 系统设计了试卷管理、试题管理、考生管理、成绩统计等...
因为才有比较基础的语法,对Java初学者、基础不是太好的小伙伴来说,也是...最重要的,就是通过比较简单、基础的语法,让你了解用Java怎么开发一个web系统,完整的了解整个开发流程,进而提升学习的信心和增加成就感。
基于Web的人力资源管理系统的设计与实现是一个使用Java语言开发的项目,采用了Spring Boot框架和MySQL数据库。该系统主要用于企业或组织的人力资源部门,帮助管理和处理员工信息、部门信息、职位信息等。以下是该...
- 前端可能采用了Vue.js等现代JavaScript框架,以提供更好的用户交互体验。 - 数据库选用MySQL,保证了数据的稳定存储和高效访问。 2. **功能模块**: - 系统设计了包括人事通讯、员工信息、人事考评、奖惩、培训...
- 前端可能使用了Vue.js等现代JavaScript框架,以构建用户友好的交互界面。 - 数据库选用MySQL,保证了数据的稳定存储和高效访问。 2. **功能模块**: - 提供用户注册和登录功能,学生和教职工可以通过系统进行注册...
该系统的前端用户界面采用了HTML、CSS和JavaScript等技术进行开发,实现了用户友好的界面设计和交互效果。后端服务器端代码使用Spring Boot框架进行开发,通过控制器、服务层和数据访问层的分层架构实现了系统的各个...
通过分析和运行这个系统,学生可以深入理解Java Web开发的关键技术,如Servlet、JSP、JDBC以及前端技术HTML、CSS和JavaScript,同时也能够学习到如何设计数据库和应用分层架构。此外,项目还可能涉及到安全性、性能...
基于SpringBoot的房屋交易平台的设计与实现是一个面向房地产市场的Web应用程序项目,旨在为用户提供一个简便、高效的在线房屋买卖和租赁服务。该平台充分利用了SpringBoot框架的快速开发特性,结合了MyBatis、MySQL...
这是一个基于JAVA语言的在线考试...通过这个项目,您可以学习到如何使用Java语言和SpringBoot框架进行Web开发,掌握前后端分离的开发模式,熟悉MySQL数据库的使用,以及如何设计和实现一个在线考试与学习交流网页平台。