首页
> 大汉专题 > 典型应用选编 > 开发进阶篇
利用jQuery提升Web开发效率
   【字体: 】 2009- 07- 17

    通过介绍jQuery的一些常用方法,同时与使用Javascript基本语法来实现这些方法的过程进行对比,展示jQuery强大的功能,和使用的方便性。通过研究利用jQuery技术实现的大汉版通JCMS中的一个分页插件,为今后使用jQuery来提升我们的Web开发效率提供一个很好的研究和参考实例。通过以上对比加实践的研究过程,说明jQuery带给我们日常Web开发方式的巨大改变和开发效率的飞速提升。

1.      引言

Javascript是一种基于对象(Object)和事件驱动(Event Driven)并具有安全性能的脚本语言。在我们日常的Web开发中必不可少的要使用它与HTML超文本标记语言、Java脚本语言(Java小程序)一起实现在一个Web页面中链接多个对象,与Web客户交互作用,从而可以开发客户端的应该程序等。而随着网站交互性的提升,Javascript正越来越多的被使用。于是产生了一些Javascript库,来简化和优化我们的Web开发。jQuery就是其中一种非常优秀,而且应用广泛的Javascript库。

本文将利用jQuery来进行一些Web开发实践,期望通过与传统Javascript开发的对比,展示jQuery带给我们的另一种开发方式,以及开发效率的快速提升。并分析大汉网络内容管理系统JCMS中的jPage插件,以实例进一步证明jQueryWeb开发的方式的改进。

2.      jQuery概述

2.1.   jQuery背景

jQuery2006114BarCamp NYC (New York City)面世。3个主要开发人员分别是:两个美国人John ResigBrandon Aaron,一个德国人Jorn Zaefferer

jQuery是继prototype之后又一个优秀的Javascript框架。其宗旨是WRITE LESS,DO MORE,写更少的代码,做更多的事情。它是轻量级的js(压缩后只有21k),兼容CSS3,还兼容各种浏览器 (IE 6.0+, FF 1.5+, Safari 2.0+, Opera 9.0+)。它是一个快速的,简洁的javaScript库,使用户能更方便地处理HTML documentsevents、实现动画效果,并且方便地为网站提供AJAX交互。它的文档说明很全,而且各种应用也说得很详细,同时还有许多成熟的插件可供选择。它能够使用户的html页保持代码和html内容分离,也就是说,不用再在html里面插入一堆js来调用命令了,只需定义id即可。

 

2.2.   jQuery能做什么

我们用一个实例来说明库的操作之前,我们应该在开始的位置讨论一下我们为什么需要它。

jQuery 库为普通的web脚本提供了一种通用的抽象层,并且它几乎在每种脚本环境都是有用的。它以插件的形式持续地通过开发加入新的功能。这种核心的特性,可以满足以下的需求:

获取页面的部分内容,不使用JavaScript库,必须写很多行代码来遍历DOM树,才能找现职HTML文档的指定部分。jQuery 提供了一个强大而有效的选择机制来返回被检查或者被操作的文档。

修改页面的外观CSS提供了一个影响文档渲染的强大方法,当web浏览器不支持同样的标准时,它却是不尽人意的。jQuery 能弥补这个差距,提供了跨所有浏览器的同样的标准的支持。另外,即使页面被渲染后,jQuery 仍可改变文档一部分中的类或者独立的样式属性。

修改页面的内容,不仅限于外观的改变,jQuery 还可以用很少的代码就可修改文档的内容本身。文本可改变,图像可插入或替换,列表可重新排序或者整个HTML结构可被重写和扩展,完成这些只需一套非常易用的API

在页面中响应用户的交互,当它们发生时,如果我们不能控制,即使是最周密最强大的行为也是没有用的。jQuery 库提供了一个简洁的方法来截取多种事件,例如用户单击链接,我们不需要将事件句柄混杂到  HTML 代码中。同时,事件句柄  API 删除浏览器不一致性,往往会让web开发者感到很烦恼。

给页面加上动画,为了有效地执行交互行为,设计师必须提供可视的反馈给用户,为了更方便,jQuery库提供了一组效果来推进它,效果淡入淡出,还可以自由定制。

无刷新返回服务器端的信息,这个代码模式已经Asynchronous JavaScript and XML (AJAX) 著称了,并协助web开发者制作可响应的功能丰富的网站。

简化共同的JavaScript任务,除了jQuery 指定的文档的所有特性外,这个库还提供了改进基本的  JavaScript 结构,如秩代和数组操作。

 

3.      jQuery基础

3.1.   页面元素的引用

Javascript获得元素的主要通过idname、元素名三种方式:

 

document.getElementById("username")         //获得idusername的元素

document.getElementsByName("username")[0]   //获得nameusername的第一个元素

document.getElementsByTagName("input")[0].value //获得标签为input的第一个元素

代码 1

 

如果想通过更为复杂的条件来选取元素,就很难办到了。而jQuery 最强有力的方面是它能很容易进行DOM遍历,它可以通过idclass、元素名以及元素的层级关系及dom或者xpath条件等,使用$()引用元素:

 

$("#username")          //获得idusername的元素

$("[name='username']")  //获得nameusername的元素

$("input")              //获得所有input元素

$(".infoinput")         //获得所有classinfoinput的元素

$("#username input")    //获得idusernmae的元素内的所有input元素

代码 2

可以看到,jQuery使用非常简单的选择器就可以获得复杂条件下的元素。此外,还可以结合cssxpath选择器以及自定义选择器来做更复杂的元素引用。这样,在WEB开发中,我们不用编写大量的javascript就可以轻松的对页面元素进行操作。

 

3.2.   绑定事件

通过绑定事件,程序可以对用户操作进行反馈。

Javascript的事件绑定:

 

document.getElementById("save").onclick = function(){alert("Hello World!");};

代码 3

 

同样,jQuery也有相应的事件绑定方法:

 

$("#save").onclick(function(){alert("Hello World!");});

代码 4

 

     同时,jQuery还支持方法的连锁,即可以对一个jquery对象连续调用各种不同的方法。

例如,如果我们除了为save按钮绑定了onclick事件,还想实现,当鼠标移动到按钮上时,为按钮加上样式“btnover”,当鼠标移出后,去掉“btnover”样式。

使用Javascript,我们需要在标签内加上onclickonmouseoveronmouseout三个事件绑定:

 

代码 5

     或者获得三次元素,分别绑定三个事件:

 

document.getElementById("save").onclick = sayHi();

document.getElementById("save").onmouseover = btnOver();

document.getElementById("save").onmouseout = btnOut();

代码 6

 

使用jQuery,我们采用连锁写法,只需要获得一次元素:

 

$("#save").click(sayHi).mouseover(btnOver).mouseout(btnOut);

代码 7

大大简化了代码的书写,同时使得页面的body部分更加清洁。

此外,jQuery的强大远不止于此,下一章,我们就通过大汉版通JCMS中的一个AJAX分页插件,来了解一下如何利用jQuery来轻松的开发一个复杂的插件。

 

4.      jQuery分页插件jPage开发

4.1.   分页插件的需求分析

在大型门户类网站中,往往有大量的数据需要展示,而由于篇幅所限,不可能将所有内容都显示在一个页面中,于是需要通过分页的方式来分段显示这些内容。但是,通常考虑到访问量和速度的原因,这类网站都采用由内容管理系统在后台生成静态HTML文件后,发布到前台的方式。这就在一定程度上限制了网站的交互功能。因为静态页面无法对用户操作做出响应,只能用来展示。有一些网站的分页,采取了静态的Javascript分页,即将当前分页以外的数据隐藏,当点击到目标页码后,再将需要展示的内容显示出来,这种方式的反应速度很快,因为数据在第一次页面加载的时候就已经载入了。但其实,这种方式造成了页面数据的冗余,导致在网页第一次加载的时候相当缓慢,并且占用了大量的客户端内存。而这些内容,不是所有用户都会去查看的。那么,另一种方式,通过AJAX,向动态页面发送请求,再将处理后的数据返回,在不刷新整个页面的情况下,对局部数据进行更新,这正是我们所需要的效果。

 

4.2.   jPage概述

jPage使用jQuery$.ajax()方法,向数据代理页面发送请求,获得一组分页的数据。插件中,用到jquery.cookie.js这个插件,将当前页码和每页显示记录数保存在cookie中,当刷新整个页面的时候,依然定位在最后一次访问分页。

图表 1

 

4.3.   jPage代码分析

4.3.1                 jQuery方法扩展

   jQuery扩展一个插件的方法很简单。这里,我们对idpage1div容器插入分页:

   $("#page1").jpage([参数]);

   只需要这么一个方法,就可以显示一个分页效果,一个页面上可以使用多个分页。

4.3.1                 按钮监听

//刷新按钮监听

btnRefresh.bind("mousedown",pressHandler).bind("mouseup",unpressHandler).bind("mouseout",unpressHandler);

代码 8

 

btnRefresh是刷新按钮的jQuery对象,使用jQuerybind方法,为刷新按钮绑定了mousedownmouseupmouseout三个事件。

我们可以看到,这种绑定方式不同于上一章介绍的$().click()方式,使用他的好处在于,我们可以使用unbind方法,取消bind方法绑定的事件。

 

btnRefresh.unbind(“click”);

代码 9

4.3.1                 AJAX数据请求

/**

  * 获得远程数据

  */

function getRemoteData(){

    //……

    $.ajax(

        {

            type: "POST",//请求类型为post

            url: "proxy.jsp",//请求页面URL地址

            cache: false,//是否缓存

            data: ajaxParam,//参数

            dataType: "script",//返回值类型

            timeout: 30000,//超时事件

            success: function(msg){//成功返回

                //……

            },

            error: function(){//发生错误

                //……

            }

        }

    );

}

代码 10

使用jQuery$.ajax()来请求一组数据。请求超时事件为30秒。如果成功返回,则更新分页数据,并刷新按钮状态;如果超时或发生错误,则弹出提示。

5.      结论

jQuery简化了代码的编写,将常用的方法和复杂的功能封装起来,通过强大的选择器获取需要的对象后,把这些方法直接运用到获取的对象上,开发人员不需要精通Javascript,就可以实现丰富的表现和交互功能;同时,jQuery使得html内容和Javascirpt代码分离,降低了表现(HTML)和控制(Javascirpt)的耦合性,html内容的改变产生的影响更小,不需要重新编写脚本;开发人员不需要考虑兼容性,jQuery兼容CSS3,还兼容各种浏览器;它还改进了基本的JavaScript结构,如秩代和数组操作的性能。总之,jQuery带来的性能、效率的提升是巨大的,期望更多的开发人员参与到jQuery的改进和应用中来。

 

6.      典型成功案例

政府网站典型案例

 

名称

 

应用案例

网址

政府

省级

山东省政府

http://www.shandong.gov.cn/

地市级

浙江

宁波市政府

http://www. nb.gov.cn/

温州市政府

www.wenzhou.gov.cn

嘉兴市政府

www.jiaxing.gov.cn

 

 

山东

济南市政府

http://www.jinan.gov.cn/

淄博市政府

http://www.zibo.gov.cn

济宁市政府

www.jining.gov.cn/

临沂市政府

http://www.linyi.gov.cn

 

 

江苏

泰州市政府

http://www.taizhou.gov.cn/

南通市政府

www.nantong.gov.cn/

 

 

安徽

滁州市政府

www.chuzhou.gov.cn/

 

马鞍山市政府

www.mas.gov.cn

其他

永州市政府

www.yzcity.gov.cn

阳泉市政府

www.yq.gov.cn/

宜昌市政府

www.yichang.gov.cn/

六盘水市政府

www.gzlps.gov.cn/

常德市政府

 

区县级

浙江

余姚市政府

www.yy.gov.cn/

慈溪市政府

www.cixi.gov.cn/

江北区政府

www.nbjiangbei.gov.cn

鄞州区政府

www.nbyz.gov.cn/

宁波保税区

www.nftz.gov.cn/

鸥海区政府

www.ouhai.gov.cn/

嘉善县政府

www.jiashan.gov.cn/

天台县政府

 

江苏

玄武区政府

www.xwzf.gov.cn

鼓楼区政府

www.njgl.gov.cn/

栖霞区政府

qixia.nj.gov.cn

下关区政府

www.njxg.gov.cn/

江宁区政府

www.jiangning.gov.cn/

宿城区政府

www.sqsc.gov.cn/

赣榆县政府

gyx.lyg.gov.cn/d

太仓市政府

www.taicang.gov.cn/

其他

宜都市政府

www.hbyidu.com/

当阳市政府

www.hbdy.gov.cn/

高青县政府

www.gaoqing.gov.cn/

六枝特区政府

www.liuzhi.gov.cn/

惠民县政府

 

市中区政府

 

历城区政府

 

 

 

名称

 

应用案例

网址

各级部门

国家部委

中华人民共和国工业和信息化部

http://www.miit.gov.cn/

省级

浙江

浙江省司法厅

www.zjsft.gov.cn/

浙江省卫生厅

www.zjwst.gov.cn/

浙江省地税局

www.zj-l-tax.gov.cn/

浙江省国资委

gzw.zj.gov.cn/

浙江省审计厅

www.zjsjt.gov.cn/

山东

山东省国家税务局

www.sd-n-tax.gov.cn/

山东省地方税务局

www.sdds.gov.cn/

山东省公安厅

www.sdga.gov.cn/

山东省畜牧办

www.sdxm.gov.cn/

山东省农业厅

www.sdny.gov.cn/

江苏

江苏省交通厅

www.jscd.gov.cn/

江苏省审计厅

www.jssj.gov.cn/

江苏省地方税务局

www.jsds.gov.cn

江苏省旅游局

www.jstour.gov.cn

江苏省食品药品监督管理局

www.jsfda.gov.cn/

江苏省监狱管理局

www.jsjy.gov.cn

江苏省气象局

www.jsmb.gov.cn/

江苏省信息中心

www.jsic.gov.cn/

江苏省档案局

www.dajs.gov.cn

江苏省海事局

www.js-msa.gov.cn/

其他

上海市质量监督管理局

www.shzj.gov.cn

湖北省国家税务局

www.hb-n-tax.gov.cn/

安徽省国家税务局

www.ah-n-tax.gov.cn/

地市、区县级

浙江

杭州市审计局

www.hzsj.gov.cn/

宁波市财税局

www.nbcs.gov.cn/

江苏

无锡监狱

wx.jsjy.gov.cn/

南京环保局

www.njhb.gov.cn

句容监狱

jr.jsjy.gov.cn/

打印页面】 【关闭窗口
 
苏 ICP 备 05075050 号 1997-2009 南京大汉网络有限公司 版权所有
Produced By 大汉网络 大汉版通发布系统