如何学好java

如何学好java,其实很简单,只要用心体会,慢慢积累!
posts - 106, comments - 7, trackbacks - 0, articles - 3
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

60小时不夜城!这是2009年沈阳兴隆大家庭商城圣诞节的又一个“不夜城策划”——在这个名为圣诞购物狂欢节的大型促销活动中,这个沈阳第一家巨型购物中心又一次走在了同行业竞争对手的前列,1224,从早上九点半开业,到夜里十二点,兴隆大家庭商业集团的各家商城和购物中心将会带来又一个“不熄灯”的圣诞节。

 

对于辽宁兴隆大家庭商业集团来说,举办这样的“不夜城”已经不是第一次了,在2009年几乎每一个重要的节日,无论是元旦、春节、五一还是十一长假,兴隆大家庭旗下的各家门店,都以这种近乎“疯狂”的活动来进行一场极为声势浩大的促销,但是,兴隆大家庭的同业者们却在艳羡的同时,并不知道整个兴隆大家庭的信息部所付出的努力。

 

而一个又一个的“一夜城”和一个又一个大型活动,不仅仅让人们记住了兴隆大家庭这个在辽宁地区具有极大影响力的民营商业集团,每到过年或节假日便接踵而来,更让所有的商业零售业同行十分诧异:兴隆大家庭到底是如何做到这一切的?

 

事实上,就在兴隆大家庭的众多同业仍然在考虑将独立的系统进行交互、兼容和集中的时候,兴隆大家庭的CIO、信息部部长周如,却不仅早已不再为系统的整合与设备集中所困,更是已经完成了许多他的同行们连想都不敢想的工作:周如和他的团队为兴隆大家庭建立了一套坚实的容灾与业务连续性系统。

 

兴隆大家庭:数据与业务 不能承受之重

 

周如说在企业高层批复进行容灾工程之前,他其实并不忐忑,高层是否批复,他是心里有数的,凭着兴隆大家庭多年对信息化的重视,信息化对兴隆大家庭商业集团所带来的益处是有目共睹的,而真正令他忐忑的,是到底怎么做?到底能不能做好?

 

“董事长批准以后,事实上一直过了很久我们才做完,我们考虑要万无一失,经过了反复的验证和测试。”周如心里十分明白,做灾难备份这件事情,赢得领导的支持并不难,难的是“做了没什么好处,不做却有坏处,虽然很可能一直用不上,但是一旦业务系统出了问题,最后的屏障就是容灾系统。”周如用了四个字来形容当时自己完成这个项目时的心情:高度慎重。

 

“以前我们的进销存、财务都是分离的,后来在沈阳做了数据中心,把业务、财务、经营管理数据都做了集中,但是,集中的不仅是数据还有风险。”周如虽然对“风险”二字虽然轻描淡写,但是经他详细一说,这“风险”二字的分量陡然重了起来。

 

周如说,在商业零售业中,晚上十点关门,早上六点营业是再平常不过的事情,而所有的零售企业又都需要日结,这也就意味着,算上生成报表再转移给财务系统的时间,整个日结又需要两个小时,而与此同时,日结的特点又要求业务中心的备份周期是一天,而不是两天或是一周——周如说,现在的兴隆大家庭,一天备份的业务和财务数据就有几百个GB

 

“如果丢失,就意味着要有非常多的人力物力去找回,要一条一条的输入,而且,现在商业零售业的业务普遍都依赖信息系统的正常运转。”而周如不经意间还提到,在兴隆大家庭,所有的关键业务的数据都是“每天全备份”,周如说,以前根本不敢想遇到节假日如果出现数据丢失的情况,因为丢失的数据会“非常非常多”。

 

于是,周如和他的团队,着手开始为兴隆大家庭在信息化上思考保驾护航。

 

横跨数百公里:如何更加快速?如何更好保护?

 

在不断的学习和摸索之后,周如意识到,做容灾,而且是异地容灾,不仅需要有最好保护介质,更要有好的保护机制——周如说,对于网络带宽并不富裕的兴隆大家庭来说还有一个额外的要求:系统一旦上线,远程传输在广域网上对带宽的要求要更低,不能够“淹没广域网带宽”。

 

显然,对于周如的要求来说,做容灾却并不是一件简单的事情,虽然如今的备份恢复软件能够帮助CIO们快速、高效甚至自动化的进行备份和恢复,而无需人工干预,而业务系统通过新的光纤磁盘阵列也能够满足备份容量的需求,在周如和他的团队面前,仍然有两座大山:

 

兴隆大家庭位于沈阳的业务中心与灾难备份中心相聚数百公里,而贷款只有一条租用的5M带宽的互联网链路,同时,对业务数据要求越来越高的兴隆大家庭,数据量的激增和商业零售业往往营业到深夜,却又较早开门的营业特点带来了两个根本的问题:尽可能缩小的备份窗口和更好的数据保护——正像周如所说,要“万无一失”。

 

“我们开始是SAN的环境,后来我们决定上虚拟带库,以及新购置昆腾的Scalar i500磁带库。”周如和他的团队,最后选择了一个当下“十分流行”的做法:D2D2T——将业务系统上的数据有层次的转移到昆腾的DXi3500虚拟磁带库上面,同时在Scalar i500上进行最终的离线备份。

 

不过,真正完成的项目却并不像说起来这么简单,在这一次利用昆腾的虚拟磁带库、物理磁带库建立的容灾系统上,兴隆大家庭实际上建立了三道数据的“防线”:

 

第一重是利用DXi3500虚拟磁带库建立的本地高速在线备份,利用其本身带有的重复数据删除和远程复制功能,将关键业务的全部数据通过iSCSI链路备份到DXi3500上;紧接着的是第二重的离线磁带备份:在数据中心再配置一台昆腾Scalar i500智能物理磁带库,通过备份软件自动将数据从虚拟磁带库克隆到物理磁带库;第三重是异地的容灾备份:周如在异地的鞍山和沈阳本地各配置一台DXi3500虚拟磁带库,通过TCP/IP自动抽取重复删除后的备份集数据,“一旦数据中心的数据发生灾难,通过昆腾DXi3500虚拟磁带库的iSCSI链路,可立刻及时恢复数据,延续业务的连续性。”

 

周如:昆腾的三个惊喜

 

周如说,让他感到吃惊的第一点就是昆腾的“王牌”:重复数据删除技术——而这正是使得基于TCP/IP的数据容灾得以实现的根本原因,“我们发现用了之后,对广域网的要求会很低,现在每天同步的量也就120GB左右,即使是全盘备份也就是260多个GB,这对我们来说节省了大量的广域网带宽。”

 

周如说,虽然对数据灾备一直有强烈的需求,但传统方式的数据灾备其数据传输量太大,太占带宽,拖慢系统运行,严重影响了正常业务的运行,而且缺乏有效的恢复手段,而“昆腾的虚拟磁带库带有重复数据删除技术大大提高了远程传输效率,在不增加带宽成本的情况下解决了我们一直以来存在的灾备烦恼。”

 

而更让周如吃惊的是,以前所考察的大量灾难备份解决方案都太过昂贵或是复杂,“适合中小企业的太少”。周如说,作为兴隆大家庭这样的用户,非常担心那种“投入精力很大,设备买回来却不懂得用,用不起”的情况。

 

“我们追求的是低成本的信息化,高层给的投资是固定的。”周如说,昆腾所推荐的“D2D2T(磁盘到磁盘到磁带)”的方式,加上重复数据删除技术,既能够保证沈阳本地的高可用和及时恢复,又能够保证数据在鞍山的异地保护,还能够完成磁带介质的离线——在线+离线,本地+异地,磁盘+磁带,周如说,这应了一句老话“麻雀虽小五脏俱全”,“做灾备做就要做得俱全,否则就会有隐患,但是我们也不追求豪华奢侈,要做实用的灾备。”

 

不过,最让周如惊喜,但也可以说是“淡漠”的是,昆腾的设备自入驻之后便从未出过问题,使得他甚至已经“忘记了”他们的存在——“最好的服务就是没有服务,让我们把它忘记掉,让设备处在被忘记掉的状态,越高深的设备应该使用起来越简单。”

 

“引起重视都是故障率很高的。”周如半开玩笑的说道。

 

商业零售业的信息化典范:高层力主信息化

 

今年四月,在对全国的商业零售业做了普查之后,中国社会科学院发布了一份名为《商业蓝皮书:中国商业发展报告(20082009)》的报告,在报告中,社科院的专家们一阵见血的指出:在第一阶段的信息化过程中,零售企业积累了大量的数据,且企业在维护这些计算机设备和数据库系统上进行了可观的投资,但却深受“信息孤岛”的影响,无法利用这些数据获得对企业业务最直接的支持,而且,商业零售业对数据、业务的可靠性和安全性的认识仍然十分淡漠。

 

但是,正如前文所述,在兴隆大家庭,景象却并不一样——数据与数据、系统与系统、应用与应用之间的分离已经不再存在,集中的数据中心在兴隆大家庭中已经是昨日黄花,而周如和他的团队最新的工作成绩正如之前所说,已经完成了信息系统的容灾备份。

 

“做这样一个项目,我们是国内的第一批,零售企业对于容灾,是‘想做的很多,但是做的很少’。”周如说,这是与企业的高层对于信息化的看重分不开的,“很多零售业的IT部门都停滞在一个阶段了,因为他们没有获得高层的支持,但是企业发展到一定的程度,是需要做这样的事情的。”

 

周如说,在兴隆大家庭,信息化是一个“重要的事情”,从1993年第一批上电子收款机,到后来的业务系统信息化、财务系统电子化、电脑管理,“信息化在兴隆成为了传统,就这么延续下去了。”——对于周如来说,他这个信息部部长就像是获得了尚方宝剑,自然是喜笑颜开。

 

“零售业挣钱不难,但是挣大钱难,很多零售业甚至也不挣钱,原因就是管理的不好,所以我们的董事长就一直力主做信息化,用信息化提高管理水平,上进销存、财务系统,甚至包括今天的容灾系统,其实都是一直做下来的。”周如说,这几年随着人们生活水平的提高,零售企业发展的很快,会做很多业务,做预付费卡、电子化的货币,如果没有信息化,没有未雨绸缪的容灾系统,这些都是空谈,都是“高屋建瓴”,而容灾则是信息化必不可少的一环。

 

后记:

 

现在,拥有超过50万平米的营业面积和一年60亿的销售额的兴隆大家庭商业集团已经成为了企业3.1万余人真正的“大家庭”,作为辽宁地区的商业旗舰和最大的民营商业集团,2010年,集团董事长李维龙为企业定下的目标是“年销售100亿元”——周如说,兴隆人有一个理想,那就是成为“中国商业第一家”,把“兴隆大家庭”做成一个品牌,无论走到哪个城市,都会看到“兴隆大家庭”,实现兴隆人“发展连锁,商业报国”的宏愿。

 

在这个过程中,让信息化成为业务发展的助推剂,让容灾系统为业务系统的平稳运行保驾护航是整个集团的信息部每一个员工的理想,而对于兴隆大家庭信息部以及周如这个信息部部长来说,接下来的的核心工作,将是如何利用信息系统更好的促进公司的新业务,帮助企业实现新的突破——兴隆大家庭的信息化已经将很多的同业者远远抛在了身后。

 

posted @ 2011-04-20 13:59 哈希 阅读(135) | 评论 (0)编辑 收藏

     摘要: Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --><%@ page language="java" contentType="text/html; charset=GBK"  &nbs...  阅读全文

posted @ 2011-04-20 10:45 哈希 阅读(174) | 评论 (0)编辑 收藏

损耗数为零: 蓝色  #1E90FF   ->#0000FF
      不为零:红色 #ff3030   ->#FF0033


审核人 审核日期不为空时候   蓝色  #1E90FF  ->0000FF
  contactIntoDetail.aspx
 ******************************************************************
string color = string.Empty;
if (!string.IsNullOrEmpty(record.AuditId) && record.AuditDate != null && record.AuditDate > DateTime.MinValue)
                {
                    color = "#0000FF";
                }
                else
                {
                    color = "black";
                }
***********************************************************************************
style='color:"+color+"'
***************************************************************************************

posted @ 2011-04-16 13:34 哈希 阅读(101) | 评论 (0)编辑 收藏

  回忆就像止不住的流水!

posted @ 2011-04-14 10:52 哈希 阅读(41) | 评论 (0)编辑 收藏


jquery技巧总结
一、简介

1.1、概述
随着WEB2.0及ajax思想在互联网上的快速发展传播,陆续出现了一些优秀的Js框架,其中比较著名的有Prototype、YUI、jQuery、mootools、Bindows以及国内的JSVM框架等,通过将这些JS框架应用到我们的项目中能够使程序员从设计和书写繁杂的JS应用中解脱出来,将关注点转向功能需求而非实现细节上,从而提高项目的开发速度。
jQuery是继prototype之后的又一个优秀的Javascript框架。它是由 John Resig 于 2006 年初创建的,它有助于简化 JavaScript™ 以及Ajax 编程。有人使用这样的一比喻来比较prototype和jQuery:prototype就像Java,而jQuery就像ruby. 它是一个简洁快速灵活的JavaScript框架,它能让你在你的网页上简单的操作文档、处理事件、实现特效并为Web页面添加Ajax交互。

它具有如下一些特点:
1、代码简练、语义易懂、学习快速、文档丰富。
2、jQuery是一个轻量级的脚本,其代码非常小巧,最新版的JavaScript包只有20K左右。
3、jQuery支持CSS1-CSS3,以及基本的xPath。
4、jQuery是跨浏览器的,它支持的浏览器包括IE 6.0+, FF 1.5+, Safari 2.0+, Opera 9.0+。
5、可以很容易的为jQuery扩展其他功能。
6、能将JS代码和HTML代码完全分离,便于代码和维护和修改。
7、插件丰富,除了jQuery本身带有的一些特效外,可以通过插件实现更多功能,如表单验证、tab导航、拖放效果、表格排序、DataGrid,树形菜单、图像特效以及ajax上传等。

jQuery的设计会改变你写JavaScript代码的方式,降低你学习使用JS操作网页的复杂度,提高网页JS开发效率,无论对于js初学者还是资深专家,jQuery都将是您的首选。
jQuery适合于设计师、开发者以及那些还好者,同样适合用于商业开发,可以说jQuery适合任何JavaScript应用的地方,可用于不同的Web应用程序中。
官方站点:
http://jquery.com/  中文站点:http://jquery.org.cn/

1.2、目的
通过学习本文档,能够对jQuery有一个简单的认识了解,清楚JQuery与其他JS框架的不同,掌握jQuery的常用语法、使用技巧及注意事项。

二、使用方法
在需要使用JQuery的页面中引入JQuery的js文件即可。
例如:<script type="text/javascript" src="js/jquery.js"></script>
引入之后便可在页面的任意地方使用jQuery提供的语法。

三、学习教程及参考资料
请参照《jQuery中文API手册》和http://jquery.org.cn/visual/cn/index.xml
推荐两篇不错的jquery教程:《jQuery的起点教程》和《使用 jQuery 简化 Ajax 开发》
(说明:以上文档都放在了【附件】中)

四、语法总结和注意事项

1、关于页面元素的引用
通过jquery的$()引用元素包括通过id、class、元素名以及元素的层级关系及dom或者xpath条件等方法,且返回的对象为jquery对象(集合对象),不能直接调用dom定义的方法。

2、jQuery对象与dom对象的转换
只有jquery对象才能使用jquery定义的方法。注意dom对象和jquery对象是有区别的,调用方法时要注意操作的是dom对象还是jquery对象。
普通的dom对象一般可以通过$()转换成jquery对象。
如:$(document.getElementById("msg"))则为jquery对象,可以使用jquery的方法。
由于jquery对象本身是一个集合。所以如果jquery对象要转换为dom对象则必须取出其中的某一项,一般可通过索引取出。
如:$("#msg")[0],$("div").eq(1)[0],$("div").get()[1],$("td")[5]这些都是dom对象,可以使用dom中的方法,但不能再使用Jquery的方法。
以下几种写法都是正确的:
$("#msg").html();
$("#msg")[0].innerHTML;
$("#msg").eq(0)[0].innerHTML;
$("#msg").get(0).innerHTML;

3、如何获取jQuery集合的某一项
对于获取的元素集合,获取其中的某一项(通过索引指定)可以使用eq或get(n)方法或者索引号获取,要注意,eq返回的是jquery对象,而get (n)和索引返回的是dom元素对象。对于jquery对象只能使用jquery的方法,而dom对象只能使用dom的方法,如要获取第三个< div>元素的内容。有如下两种方法:
$("div").eq(2).html();              //调用jquery对象的方法
$("div").get(2).innerHTML;       //调用dom的方法属性

4、同一函数实现set和get
Jquery中的很多方法都是如此,主要包括如下几个:
$("#msg").html();              //返回id为msg的元素节点的html内容。
$("#msg").html("<b>new content</b>");      
//将“<b>new content</b>” 作为html串写入id为msg的元素节点内容中,页面显示粗体的new content

$("#msg").text();              //返回id为msg的元素节点的文本内容。
$("#msg").text("<b>new content</b>");      
//将“<b>new content</b>” 作为普通文本串写入id为msg的元素节点内容中,页面显示粗体的<b>new content</b>

$("#msg").height();              //返回id为msg的元素的高度
$("#msg").height("300");       //将id为msg的元素的高度设为300
$("#msg").width();              //返回id为msg的元素的宽度
$("#msg").width("300");       //将id为msg的元素的宽度设为300

$("input").val(");       //返回表单输入框的value值
$("input").val("test");       //将表单输入框的value值设为test

$("#msg").click();       //触发id为msg的元素的单击事件
$("#msg").click(fn);       //为id为msg的元素单击事件添加函数
同样blur,focus,select,submit事件都可以有着两种调用方法

5、集合处理功能
对于jquery返回的集合内容无需我们自己循环遍历并对每个对象分别做处理,jquery已经为我们提供的很方便的方法进行集合的处理。
包括两种形式:
$("p").each(function(i){this.style.color=['#f00','#0f0','#00f']})      
//为索引分别为0,1,2的p元素分别设定不同的字体颜色。

$("tr").each(function(i){this.style.backgroundColor=['#ccc','#fff'][i%2]})      
//实现表格的隔行换色效果

$("p").click(function(){.html())})              
//为每个p元素增加了click事件,单击某个p元素则弹出其内容

6、扩展我们需要的功能
$.extend({
       min: function(a, b){return a < b?a:b; },
       max: function(a, b){return a > b?a:b; }
});       //为jquery扩展了min,max两个方法
使用扩展的方法(通过“$.方法名”调用):
+",min="+$.min(10,20));

7、支持方法的连写
所谓连写,即可以对一个jquery对象连续调用各种不同的方法。
例如:
$("p").click(function(){.html())})
.mouseover(function(){})
.each(function(i){this.style.color=['#f00','#0f0','#00f']});

8、操作元素的样式
主要包括以下几种方式:
$("#msg").css("background");              //返回元素的背景颜色
$("#msg").css("background","#ccc")       //设定元素背景为灰色
$("#msg").height(300); $("#msg").width("200");       //设定宽高
$("#msg").css({ color: "red", background: "blue" });//以名值对的形式设定样式
$("#msg").addClass("select");       //为元素增加名称为select的class
$("#msg").removeClass("select");       //删除元素名称为select的class
$("#msg").toggleClass("select");       //如果存在(不存在)就删除(添加)名称为select的class

9、完善的事件处理功能
Jquery已经为我们提供了各种事件处理方法,我们无需在html元素上直接写事件,而可以直接为通过jquery获取的对象添加事件。
如:
$("#msg").click(function(){})       //为元素添加了单击事件
$("p").click(function(i){this.style.color=['#f00','#0f0','#00f']})
//为三个不同的p元素单击事件分别设定不同的处理
jQuery中几个自定义的事件:
(1)hover(fn1,fn2):一个模仿悬停事件(鼠标移动到一个对象上面及移出这个对象)的方法。当鼠标移动到一个匹配的元素上面时,会触发指定的第一个函数。当鼠标移出这个元素时,会触发指定的第二个函数。
//当鼠标放在表格的某行上时将class置为over,离开时置为out。
$("tr").hover(function(){
$(this).addClass("over");
},
       function(){
       $(this).addClass("out");
});
(2)ready(fn):当DOM载入就绪可以查询及操纵时绑定一个要执行的函数。
$(document).ready(function(){})
//页面加载完毕提示“Load Success”,相当于onload事件。与$(fn)等价
(3)toggle(evenFn,oddFn): 每次点击时切换要调用的函数。如果点击了一个匹配的元素,则触发指定的第一个函数,当再次点击同一元素时,则触发指定的第二个函数。随后的每次点击都重复对这两个函数的轮番调用。
       //每次点击时轮换添加和删除名为selected的class。
       $("p").toggle(function(){
              $(this).addClass("selected");   
       },function(){
              $(this).removeClass("selected");
       });
(4)trigger(eventtype): 在每一个匹配的元素上触发某类事件。
例如:
       $("p").trigger("click");              //触发所有p元素的click事件
(5)bind(eventtype,fn),unbind(eventtype): 事件的绑定与反绑定
从每一个匹配的元素中(添加)删除绑定的事件。
例如:
$("p").bind("click", function(){.text());});       //为每个p元素添加单击事件
$("p").unbind();       //删除所有p元素上的所有事件
$("p").unbind("click")       //删除所有p元素上的单击事件

10、几个实用特效功能
其中toggle()和slidetoggle()方法提供了状态切换功能。
如toggle()方法包括了hide()和show()方法。
slideToggle()方法包括了slideDown()和slideUp方法。

11、几个有用的jQuery方法
$.browser.浏览器类型:检测浏览器类型。有效参数:safari, opera, msie, mozilla。如检测是否ie:$.browser.isie,是ie浏览器则返回true。
$.each(obj, fn):通用的迭代函数。可用于近似地迭代对象和数组(代替循环)。

$.each( [0,1,2], function(i, n){ ; });
等价于:
var tempArr=[0,1,2];
for(var i=0;i<tempArr.length;i++){
       ;
}
也可以处理json数据,如
$.each( { name: "John", lang: "JS" }, function(i, n){ ; });
结果为:
Name:name, Value:John
Name:lang, Value:JS
$.extend(target,prop1,propN):用一个或多个其他对象来扩展一个对象,返回这个被扩展的对象。这是jquery实现的继承方式。
如:
$.extend(settings, options);      
//合并settings和options,并将合并结果返回settings中,相当于options继承setting并将继承结果保存在setting中。
var settings = $.extend({}, defaults, options);
//合并defaults和options,并将合并结果返回到setting中而不覆盖default内容。
可以有多个参数(合并多项并返回)
$.map(array, fn):数组映射。把一个数组中的项目(处理转换后)保存到到另一个新数组中,并返回生成的新数组。
如:
var tempArr=$.map( [0,1,2], function(i){ return i + 4; });
tempArr内容为:[4,5,6]
var tempArr=$.map( [0,1,2], function(i){ return i > 0 ? i + 1 : null; });
tempArr内容为:[2,3]
$.merge(arr1,arr2):合并两个数组并删除其中重复的项目。
如:$.merge( [0,1,2], [2,3,4] )       //返回[0,1,2,3,4]
$.trim(str):删除字符串两端的空白字符。
如:$.trim("  hello, how are you?   ");        //返回"hello,how are you? "

12、解决自定义方法或其他类库与jQuery的冲突
很多时候我们自己定义了$(id)方法来获取一个元素,或者其他的一些js类库如prototype也都定义了$方法,如果同时把这些内容放在一起就会引起变量方法定义冲突,Jquery对此专门提供了方法用于解决此问题。
使用jquery中的jQuery.noConflict();方法即可把变量$的控制权让渡给第一个实现它的那个库或之前自定义的$方法。之后应用 Jquery的时候只要将所有的$换成jQuery即可,如原来引用对象方法$("#msg")改为jQuery("#msg")。
如:
jQuery.noConflict();
// 开始使用jQuery
jQuery("div   p").hide();
// 使用其他库的 $()
$("content").style.display = 'none';


浏览:34155 2007-11-19 10:10 来自 【组长】wilensky      :

jquery技巧总结
一、简介

1.1、概述
随着WEB2.0及ajax思想在互联网上的快速发展传播,陆续出现了一些优秀的Js框架,其中比较著名的有Prototype、YUI、jQuery、mootools、Bindows以及国内的JSVM框架等,通过将这些JS框架应用到我们的项目中能够使程序员从设计和书写繁杂的JS应用中解脱出来,将关注点转向功能需求而非实现细节上,从而提高项目的开发速度。
jQuery是继prototype之后的又一个优秀的Javascript框架。它是由 John Resig 于 2006 年初创建的,它有助于简化 JavaScript™ 以及Ajax 编程。有人使用这样的一比喻来比较prototype和jQuery:prototype就像Java,而jQuery就像ruby. 它是一个简洁快速灵活的JavaScript框架,它能让你在你的网页上简单的操作文档、处理事件、实现特效并为Web页面添加Ajax交互。

它具有如下一些特点:
1、代码简练、语义易懂、学习快速、文档丰富。
2、jQuery是一个轻量级的脚本,其代码非常小巧,最新版的JavaScript包只有20K左右。
3、jQuery支持CSS1-CSS3,以及基本的xPath。
4、jQuery是跨浏览器的,它支持的浏览器包括IE 6.0+, FF 1.5+, Safari 2.0+, Opera 9.0+。
5、可以很容易的为jQuery扩展其他功能。
6、能将JS代码和HTML代码完全分离,便于代码和维护和修改。
7、插件丰富,除了jQuery本身带有的一些特效外,可以通过插件实现更多功能,如表单验证、tab导航、拖放效果、表格排序、DataGrid,树形菜单、图像特效以及ajax上传等。

jQuery的设计会改变你写JavaScript代码的方式,降低你学习使用JS操作网页的复杂度,提高网页JS开发效率,无论对于js初学者还是资深专家,jQuery都将是您的首选。
jQuery适合于设计师、开发者以及那些还好者,同样适合用于商业开发,可以说jQuery适合任何JavaScript应用的地方,可用于不同的Web应用程序中。
官方站点:
http://jquery.com/  中文站点:http://jquery.org.cn/

1.2、目的
通过学习本文档,能够对jQuery有一个简单的认识了解,清楚JQuery与其他JS框架的不同,掌握jQuery的常用语法、使用技巧及注意事项。

二、使用方法
在需要使用JQuery的页面中引入JQuery的js文件即可。
例如:<script type="text/javascript" src="js/jquery.js"></script>
引入之后便可在页面的任意地方使用jQuery提供的语法。

三、学习教程及参考资料
请参照《jQuery中文API手册》和http://jquery.org.cn/visual/cn/index.xml
推荐两篇不错的jquery教程:《jQuery的起点教程》和《使用 jQuery 简化 Ajax 开发》
(说明:以上文档都放在了【附件】中)

四、语法总结和注意事项

1、关于页面元素的引用
通过jquery的$()引用元素包括通过id、class、元素名以及元素的层级关系及dom或者xpath条件等方法,且返回的对象为jquery对象(集合对象),不能直接调用dom定义的方法。

2、jQuery对象与dom对象的转换
只有jquery对象才能使用jquery定义的方法。注意dom对象和jquery对象是有区别的,调用方法时要注意操作的是dom对象还是jquery对象。
普通的dom对象一般可以通过$()转换成jquery对象。
如:$(document.getElementById("msg"))则为jquery对象,可以使用jquery的方法。
由于jquery对象本身是一个集合。所以如果jquery对象要转换为dom对象则必须取出其中的某一项,一般可通过索引取出。
如:$("#msg")[0],$("div").eq(1)[0],$("div").get()[1],$("td")[5]这些都是dom对象,可以使用dom中的方法,但不能再使用Jquery的方法。
以下几种写法都是正确的:
$("#msg").html();
$("#msg")[0].innerHTML;
$("#msg").eq(0)[0].innerHTML;
$("#msg").get(0).innerHTML;

3、如何获取jQuery集合的某一项
对于获取的元素集合,获取其中的某一项(通过索引指定)可以使用eq或get(n)方法或者索引号获取,要注意,eq返回的是jquery对象,而get (n)和索引返回的是dom元素对象。对于jquery对象只能使用jquery的方法,而dom对象只能使用dom的方法,如要获取第三个< div>元素的内容。有如下两种方法:
$("div").eq(2).html();              //调用jquery对象的方法
$("div").get(2).innerHTML;       //调用dom的方法属性

4、同一函数实现set和get
Jquery中的很多方法都是如此,主要包括如下几个:
$("#msg").html();              //返回id为msg的元素节点的html内容。
$("#msg").html("<b>new content</b>");      
//将“<b>new content</b>” 作为html串写入id为msg的元素节点内容中,页面显示粗体的new content

$("#msg").text();              //返回id为msg的元素节点的文本内容。
$("#msg").text("<b>new content</b>");      
//将“<b>new content</b>” 作为普通文本串写入id为msg的元素节点内容中,页面显示粗体的<b>new content</b>

$("#msg").height();              //返回id为msg的元素的高度
$("#msg").height("300");       //将id为msg的元素的高度设为300
$("#msg").width();              //返回id为msg的元素的宽度
$("#msg").width("300");       //将id为msg的元素的宽度设为300

$("input").val(");       //返回表单输入框的value值
$("input").val("test");       //将表单输入框的value值设为test

$("#msg").click();       //触发id为msg的元素的单击事件
$("#msg").click(fn);       //为id为msg的元素单击事件添加函数
同样blur,focus,select,submit事件都可以有着两种调用方法

5、集合处理功能
对于jquery返回的集合内容无需我们自己循环遍历并对每个对象分别做处理,jquery已经为我们提供的很方便的方法进行集合的处理。
包括两种形式:
$("p").each(function(i){this.style.color=['#f00','#0f0','#00f']})      
//为索引分别为0,1,2的p元素分别设定不同的字体颜色。

$("tr").each(function(i){this.style.backgroundColor=['#ccc','#fff'][i%2]})      
//实现表格的隔行换色效果

$("p").click(function(){.html())})              
//为每个p元素增加了click事件,单击某个p元素则弹出其内容

6、扩展我们需要的功能
$.extend({
       min: function(a, b){return a < b?a:b; },
       max: function(a, b){return a > b?a:b; }
});       //为jquery扩展了min,max两个方法
使用扩展的方法(通过“$.方法名”调用):
+",min="+$.min(10,20));

7、支持方法的连写
所谓连写,即可以对一个jquery对象连续调用各种不同的方法。
例如:
$("p").click(function(){.html())})
.mouseover(function(){})
.each(function(i){this.style.color=['#f00','#0f0','#00f']});

8、操作元素的样式
主要包括以下几种方式:
$("#msg").css("background");              //返回元素的背景颜色
$("#msg").css("background","#ccc")       //设定元素背景为灰色
$("#msg").height(300); $("#msg").width("200");       //设定宽高
$("#msg").css({ color: "red", background: "blue" });//以名值对的形式设定样式
$("#msg").addClass("select");       //为元素增加名称为select的class
$("#msg").removeClass("select");       //删除元素名称为select的class
$("#msg").toggleClass("select");       //如果存在(不存在)就删除(添加)名称为select的class

9、完善的事件处理功能
Jquery已经为我们提供了各种事件处理方法,我们无需在html元素上直接写事件,而可以直接为通过jquery获取的对象添加事件。
如:
$("#msg").click(function(){})       //为元素添加了单击事件
$("p").click(function(i){this.style.color=['#f00','#0f0','#00f']})
//为三个不同的p元素单击事件分别设定不同的处理
jQuery中几个自定义的事件:
(1)hover(fn1,fn2):一个模仿悬停事件(鼠标移动到一个对象上面及移出这个对象)的方法。当鼠标移动到一个匹配的元素上面时,会触发指定的第一个函数。当鼠标移出这个元素时,会触发指定的第二个函数。
//当鼠标放在表格的某行上时将class置为over,离开时置为out。
$("tr").hover(function(){
$(this).addClass("over");
},
       function(){
       $(this).addClass("out");
});
(2)ready(fn):当DOM载入就绪可以查询及操纵时绑定一个要执行的函数。
$(document).ready(function(){})
//页面加载完毕提示“Load Success”,相当于onload事件。与$(fn)等价
(3)toggle(evenFn,oddFn): 每次点击时切换要调用的函数。如果点击了一个匹配的元素,则触发指定的第一个函数,当再次点击同一元素时,则触发指定的第二个函数。随后的每次点击都重复对这两个函数的轮番调用。
       //每次点击时轮换添加和删除名为selected的class。
       $("p").toggle(function(){
              $(this).addClass("selected");   
       },function(){
              $(this).removeClass("selected");
       });
(4)trigger(eventtype): 在每一个匹配的元素上触发某类事件。
例如:
       $("p").trigger("click");              //触发所有p元素的click事件
(5)bind(eventtype,fn),unbind(eventtype): 事件的绑定与反绑定
从每一个匹配的元素中(添加)删除绑定的事件。
例如:
$("p").bind("click", function(){.text());});       //为每个p元素添加单击事件
$("p").unbind();       //删除所有p元素上的所有事件
$("p").unbind("click")       //删除所有p元素上的单击事件

10、几个实用特效功能
其中toggle()和slidetoggle()方法提供了状态切换功能。
如toggle()方法包括了hide()和show()方法。
slideToggle()方法包括了slideDown()和slideUp方法。

11、几个有用的jQuery方法
$.browser.浏览器类型:检测浏览器类型。有效参数:safari, opera, msie, mozilla。如检测是否ie:$.browser.isie,是ie浏览器则返回true。
$.each(obj, fn):通用的迭代函数。可用于近似地迭代对象和数组(代替循环)。

$.each( [0,1,2], function(i, n){ ; });
等价于:
var tempArr=[0,1,2];
for(var i=0;i<tempArr.length;i++){
       ;
}
也可以处理json数据,如
$.each( { name: "John", lang: "JS" }, function(i, n){ ; });
结果为:
Name:name, Value:John
Name:lang, Value:JS
$.extend(target,prop1,propN):用一个或多个其他对象来扩展一个对象,返回这个被扩展的对象。这是jquery实现的继承方式。
如:
$.extend(settings, options);      
//合并settings和options,并将合并结果返回settings中,相当于options继承setting并将继承结果保存在setting中。
var settings = $.extend({}, defaults, options);
//合并defaults和options,并将合并结果返回到setting中而不覆盖default内容。
可以有多个参数(合并多项并返回)
$.map(array, fn):数组映射。把一个数组中的项目(处理转换后)保存到到另一个新数组中,并返回生成的新数组。
如:
var tempArr=$.map( [0,1,2], function(i){ return i + 4; });
tempArr内容为:[4,5,6]
var tempArr=$.map( [0,1,2], function(i){ return i > 0 ? i + 1 : null; });
tempArr内容为:[2,3]
$.merge(arr1,arr2):合并两个数组并删除其中重复的项目。
如:$.merge( [0,1,2], [2,3,4] )       //返回[0,1,2,3,4]
$.trim(str):删除字符串两端的空白字符。
如:$.trim("  hello, how are you?   ");        //返回"hello,how are you? "

12、解决自定义方法或其他类库与jQuery的冲突
很多时候我们自己定义了$(id)方法来获取一个元素,或者其他的一些js类库如prototype也都定义了$方法,如果同时把这些内容放在一起就会引起变量方法定义冲突,Jquery对此专门提供了方法用于解决此问题。
使用jquery中的jQuery.noConflict();方法即可把变量$的控制权让渡给第一个实现它的那个库或之前自定义的$方法。之后应用 Jquery的时候只要将所有的$换成jQuery即可,如原来引用对象方法$("#msg")改为jQuery("#msg")。
如:
jQuery.noConflict();
// 开始使用jQuery
jQuery("div   p").hide();
// 使用其他库的 $()
$("content").style.display = 'none';

posted @ 2011-03-30 09:14 哈希 阅读(75) | 评论 (0)编辑 收藏

仅列出标题
共11页: First 上一页 3 4 5 6 7 8 9 10 11