什么是Jquery!!
Posted 前端HTML5
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了什么是Jquery!!相关的知识,希望对你有一定的参考价值。
Jquery是继prototype之后又一个优秀的Javascrīpt框架。它是轻量级的js库(压缩后只有21k) ,它兼容CSS3,还兼容各种浏览器(IE 6.0+, FF 1.5+, Safari 2.0+, Opera 9.0+)。jQuery使用户能更方便地处理html documents、events、实现动画效果,并且方便地为网站提供AJAX交互。jQuery还有一个比较大的优势是,它的文档说明很全,而且各种 应用也说得很详细,同时还有许多成熟的插件可供选择。jQuery能够使用户的html页保持代码和html内容分离,也就是说,不用再在html里面插 入一堆js来调用命令了,只需定义id即可。
简介
jQuery由美国人John Resig创建,至今已吸引了来自世界各地的众多javascript高手加入其team,包括来自德国的Jörn Zaefferer,罗马尼亚的StefanPetre等等。jQuery是继prototype之后又一个优秀的Javascrīpt框架。其宗旨是——WRITE LESS,DO MORE,写更少的代码,做更多的事情。
找到你了!
在编写js库代码时候,你一定经常和“$”美元符号打交道吧?无论prototype还是DWR都使用了$代替频繁的 document.getElementById()操作。jQuery也这样做了,但是,它的功能远非如此,瞧瞧以下的jQuery代码,你就会发现它 的美丽:
代码
var someElement = $("#myId");
看起来比其他两个框架的要多了一个#,好,看看下面的用法:
代码
$("div p"); // (1)
$("div.container"); // (2)
$("div #msg"); // (3)
$("table a",context); // (4)
在prototype里看过这样的写法吗?第一行代码得到所有div标签下的p元素。第二行代 码得到class 为container的div元素,第三行代码得到标签下面id为msg的div元素(不过最好别这样写,因为jQuery需要遍历所有的div元素,对 于带id的元素,直接用$("#id"))。第四行代码得到context为上下文的table里面所有的链接元素。
如果你熟悉CSS,你会觉得这些写法很眼熟!对了。正是。看出奥妙了吧。jQuery就是如此强大,你可以轻易地找到DOM中的任何元素,而这也是jQuery设计之初query的真实含义(查询)。
Jquery对象
jquery提供了很多遍历的函数,如each(fn),但是使用这些函数的前提是:你使用的对象是Jquery对象。使一个Dom对象成为一个Jquery对象很简单,通过下面一些方式(只是一部分):
代码
var a = $("#cid");
var b = $("<p>hello</p>");
var c = document.createElement("table");
var tb = $(c);
代替body标签的onload
这个惯例,也许是除了$()之外,用得最多的地方了。下面一段代码:
代码
$(document).ready(function(){
alert("hello");
});(1)
<body onload="alert('hello');">(2)
上面两段代码是等价的。但代码1的好处是做到表现和逻辑分离。并且可以在不同的js文件中做相 同的操作,即$(document).ready (fn)可以在一个页面中重复出现,而不会冲突。基本上Jquery的很多plugin都是利用这个特性,正因为这个特性,多个plugin共同使用起 来,在初始化时不会发生冲突。
不管怎么说,这个惯例可以分离javascrīpt与HTML。推荐使用。
别误导,上面两段代码不是等价的。
<body onload="alert('hello');">这里的alert('hello');要等到页面全部加载完毕才执行,注意是全面加载,包括dom,图片等其它资源。
而$(document).ready(function(){
alert("hello");
});(1)
当dom加载完就可以执行了。
事件机制
我大量使用的事件可能就是button的onclick了。以前习惯在input 元素上写onclick = "fn()",使用jquery可以使javascrīpt代码与html代码分离,保持HTML的清洁,还可以很轻松地绑定事件,甚至你可以不知道“事 件”这个名词。
代码
$(document).ready(function(){
$("#clear").click(
function(){
alert("i am about to clear the table");
}
);
$("form[12]").submit(validate);
});
function validate(){
//do some form validation
}
同一函数实现getset
代码
$("#msg").html();
$("#msg").html("hello");
上面两行代码,调用了同样的函数。但结果却差别很大。
第一行是返回指定元素的HTML值,第二行则是将hello这串字符设置到指定元素中。jquery的函数大部分有这样的特性。
ajax
这是一个ajax横行的时代。多少人,了不了解ajax的都跟着用上一把。呵。使用jquery实现ajax同样异常简单
代码
(1)
$.get("search. do",{id:1},rend);
function rend(xml){
alert(xml);
}
(2)
$.post("search. do",{id:1},rend);
function rend(xml){
alert(xml);
}
(3)
$("#msg").ajaxStart(function(){
this.html("正在加载。。。。");
});
(4)
$("#msg").ajaxSuccess(function(){
this.html("加载完成!");
});
这些都是较常用的方法,get和post用法一样。第一个参数是异步请求的url,第二个为参数,第三个回调方法。(4)的方法会在指定的Dom对象上绑定响应ajax执行的事件。
(5)同步加载数据。发送请求时锁住浏览器。需要锁定用户交互操作时使用同步方式。
var html = $.ajax({
url: "some.php",
async: false
}).responseText;
(6) 保存数据到服务器,成功时显示信息。
$.ajax({
type: "POST",
url: "some.php",
data: "name=John&location=Boston",
success: function(msg){
alert( "Data Saved: " + msg );
}
});
渐入淡出
代码
$("#msg").show("fast");
$("#msg").hide("slow");
$("#msg").fadeIn();
$("#msg").fadeOut();
没错,上面两行代码已经分别实现了一个id为Msg的jquery对象的渐入和淡出。做一个像Gmail一样的动态加载通知条,用jquery就那么简单。两个函数接受的参数除了快慢等,还可以接收整型,作为渐入或淡出的完成时间,单位为MS。
plugin
这也是一个插件的时代。
jquery插件给我的感觉清一色的清洁,简单。如Jtip,要使用它的功能,只需要在你的元素的class上加上Jtip,并引入jtip.js及其样式即可以了。其他事情插件全包。我喜欢jquery的一个重要原因是发现她已经有了很多很好,很精彩的插件。
写得很烂。可能大家看不出jquery的好处。嗯,光听是没用的,试用一下吧。你会发觉很有趣。
暂时告一段落吧。待有新的发现再来分享。
加一些Jquery的资源:
http://www.visualjquery. com/index.xml 很好的API查询站点
http://jquery. com/demo/thickbox/ 知道lightBox吧,看看Jquery是怎样实现相同的东西
http://jquery. org. cn/visual/cn/index.xml //不错的JQUERY 中文学习 推荐
微软的visualstudio 2008 sp1支持对jquery的动态提示,只要在代码页导入对应的vsdoc脚本就可以。
目前为止,jQuery的最新版本为1.5.2
历史版本
jQuery 1.0(2006年8月):该库的第一个稳定版本,已经具有了对CSS选择符、事件处理和AJAX交互的稳健支持。
jQuery 1.1(2007年1月):这一版大幅简化了API。许多较少使用的方法被合并,减少了需要掌握和解释的方法数量。
jQuery 1.1.3(2007年7月):这次小版本变化包含了对jQuery选择符引擎执行速度的显著提升。从这个版本开始,jQuery的性能达到了Prototype、Mootools以及Dojo等同类JavaScript库的水平。
jQuery 1.2(2007年9月):这一版去掉了对XPath选择符的支持,原因是相对于CSS语法它已经变得多余了。这一版能够支持对效果的更灵活定制,而且借助新增的命名空间事件,也使插件开发变得更容易。
jQuery UI(2007年9月):这个新的插件套件是作为曾经流行但已过时的Interface插件的替代项目而发布的。jQuery UI中包含大量预定义好的部件(widget),以及一组用于构建高级元素(例如可拖放的界面元素)的工具。
jQuery 1.2.6(2008年5月):这一版主要是将Brandon Aaron开发的流行的Dimensions插件的功能移植到了核心库中。
jQuery 1.3(2009年1月):这一版使用了全新的选择符引擎Sizzle,库的性能也因此有了极大提升。这一版正式支持事件委托特性。
jQuery 1.3.2(2009年2月):这次小版本升级进一步提升了库的性能,例如改进了:visible/:hidden选择符、.height()/.width()方法的底层处理机制。另外,也支持查询的元素按文档顺序返回。
jQuery 1.4(2010年1月14号对)代码库进行了内部重写组织,开始建立一些风格规范。老的core.js文件被分为attribute.js, css.js, data.js,manipulation.js, traversing.js和queue.js;CSS和attribute的逻辑分离。
jQuery 1.5(2011年1月31日):该版本修复了83个bug,解决了460个问题。重大改进有:重写了Ajax模块;新增延缓对像(Deferred Objects);jQuery替身——jQuery.sub();增强了遍历相邻节点的性能;jQuery开发团队构建系统的改进。
1.4重要新特性:
·常用方法的性能大幅提升:重写了大部分较早期的函数;
·更容易使用的设置函数(setter function):为所有对象新增了许多易用的设置函数;
·对Ajax的改进:引入了许多Ajax和JSON处理方面的更新,包括HTML5元素的序列化;
·attribute(改进了.attr()的性能)、jQuery()核心函数、CSS(.css()性能有两倍提升)、特效和事件、DOM操作等也有显著改进
1.5
美国时间1月31日John Resig在jQuery官方博客发表文章, 宣布jQuery1.5正式版已经如期开发完成,可以下载使用。压缩版本jQuery Minified 29KB,不压缩版本jQuery Regular(用于阅读和调试)207KB。由于jQuery已经成为目前最流行的JavaScript库,得到广泛的支持,新版本的发布当然非常引人注目。
重要变化:
1. Ajax重写 Ajax模块完全进行了重写。新增一个jXHR对象,为不同浏览器内置的XMLHttpRequest提供了一致的超集。对于XMLHttpRequest之外的传输机制,比如JSONP请求,jXHR对象也可以进行处理。(详情可以参见:jQuery.ajax文档)
此外,系统的可扩展性大大增强,可以附加各种数据处理器、过滤器和传输机制,为开发新的Ajax插件提供了方便。
2. 延迟对象
延迟对象(Deferred Object,jQuery.Deferred对象)是一个可链接的(chainable)实用工具对象,实现了Promise接口,可以在回调队列中注册多个回调、调用回调队列并转发任何同步/异步函数的成败状态。正如UsingDeferreds in jQuery 1.5一文中说明的,其结果是在jQuery中能够将依赖于某个任务(事件)结果的逻辑与任务本身解耦了。这一点在JavaScript中其实并不新 鲜,Mochikit和Dojo等已经实现有些日子了。由于jQuery 1.5的Ajax模块内置使用了延迟对象,因此现在通过jQuery编写Ajax程序将自动获得这一功能。
开发人员借此可以使用无法立即获得的返回值(如异步Ajax请求的返回结果),而且第一次能够附加多个事件处理器。
例如,使用了新的jQuery内部Ajax API就可以实现下面的代码了:
// Assign handlers immediately after making therequest, // and remember the jxhr object for this request var jxhr = $.ajax({url: "example.php" }) .success(function() {alert("success"); }) .error(function() { alert("error"); }).complete(function() { alert("complete"); });// perform other workhere ... // Set another completion function for the request abovejxhr.complete(function(){ alert("second complete"); });
此外,使用jQuery.Deferred还可以开发自己的延迟对象。更多详情参见:延迟对象文档。
3. jQuery.sub()
jQuery 1.5提供了一种创建和修改jQuery副本的方式。可以用来添加不向外部公开的方法,或者对jQuery的某些方法进行重新定义以提供新功能,或者提供 更好的封装、避免名称空间冲突。当然,也可以用来开发插件,但Resig强烈建议在开发插件之前,先考虑jQuery UI widget工厂。
值得注意的是,sub函数并不提供真正的隔离,所有方法、数据、调用仍然依靠jQuery本身来支持。
4. 遍历性能提高
在新版本中.children(), .pre(), .next()几个常用的遍历函数性能有了显著提高。
详细的测试用例和数据可以参考这里。
5. 内部开发系统
John Resig还特别提到了jQuery团队内部开发系统的两点改变:一是服务器端用Node.js替换了老的Java/Rhino系统,使得团队可以专注于 JavaScript环境的新变化;二是所用的代码优化程序从Google Closure切换到UglifyJS,新工具的压缩效果非常令人满意。
有意思的是,此前UglifyJS开发者曾经公布过自己的测试结果,表明对jQuery的压缩结果UglifyJS要比Closure略大(都在72KB左右),但运行速度快得多,而且Closure不太安全。看来,这段时间UglifyJS的进展也很快啊。
jQuery 1.5.2 在1.5的基础上修正的大量的bug
1.42版介绍
jQuer1.4.2版本修复了1.4版本的一些错误和优化了一些不错的改进,速度比1.4.1版本又提升
了一倍,该版本对性能做了一些改进,同时增加了一些api (.delegate() and .undelegate(). ),右图是JQuery各个版本的性能比较:
jquery1.42新特性:
加了两个新方法:.delegate() 和.undelegate().是对.live() and .die() 的补充. 这两个方法对特定的事件的起到简化。
范例:
$("table").delegate("td","hover", function(){ $(this).toggleClass("hover"); });
等于使用 .live():
$("table").each(function(){ $("td",this).live("hover", function(){$(this).toggleClass("hover"); }); });
另外,以下代码中,.live() 基本上等同于 .delegate().
$(document).delegate("td", "hover",function(){ $(this).toggleClass("hover"); });
变更
大量代码进行了重写, 提升了性能及修正了一些长期存在的问题。
提升性能
每次开发新的jquery版本,我们都努力去持续优化性能,以保证你能用到最高性能的javascript代码。
在Taskspeed benchmark 的测试中,1.4.2比1.4.1快1倍,比1.3.2快2倍。
主要是在下面4个方面进行了提升:
.bind() 和 .unbind().
.empty(), .remove(), 和 .html().
插入单个DOM 节点到 document.
$("body")
在测试用例中,比较多的用到了 $("body"), .bind(), .unbind()方法,因此测试结果提升比较明显。
v重写事件
event handlers 不再作为一个对象属性保存在jQuery的内部对象里。现在是保存在一个内部的对象数组里。v现在可以通过调用.data("events") , 将会返回一个对象包含的所有事件类型。
现在可以使用不同的数据、命名空间、事件类型绑定在同一个handler
在一个handler清除自己之后,事件handler会继续执行
不用关联数据或者命名空间到事件handler
不用再使用代理方法
事件执行的顺序在所有浏览器中得到保证,Google Chrome 中出现的对象循环逻辑问题已经得到解决.
JQuery插件
【基础】 [1]
a)样式
很 多人会认为样式是个很复杂的东西,需要沉着冷静的心态加上非凡的审美观才能设计出赏心悦目的UI,抛开图片设计不说,其实css也就是那么些属 性:position,margin,padding,width,height,left,top,float,border,background…
UI设计的漂亮与否在很大程度上依赖于设计人员对配色的把握和整体效果的协调。
b)脚本
我们同样需要对javascript有着深刻的理解,对dom,xhr, Regex, call-apply, prototype等都应该有一定的了解。
有人会说要这些有啥用啊,对dom的操作其实通过getElementById,getElementsByTagName以及其他的API都可以轻松的完成,这话是没错,当思路确定后,思想才是重点,一段代码是精华还是糟粕很容易就可以区分出来,究其原因还是取决你自己
【实践】
jQuery开发或使用,更多的灵感是来自实践,而不是copy||paste(奉行拿来主义的同学可以离开了)。
那么在这里我会用一个简单的例子来阐述jQuery插件开发的流程,能否举一反三就看各位看官了。
【目的】
开发一个插件之前我们需要对自己的目的有一个清醒的认识,有很明确的方向感,那么此次我作为示例插件的目的,就是呈现一个用于UI的Slider – 滑动条,常年从事于或暂时专注于win32开发的同学应该比较了解。
【草图】
真正动手编码之前我们还需要有一个草图来描述自己插件的“长相”(事件驱动或API封装的可以忽略)。
很多的同学在做UI开发前往往会忙于搜集各种小图片(非精通ps或iconworkshop人士),其实漂亮的图标的确可以美化我们的UI,不过我一般的处理方式是编写易于扩展的css,前期的UI呈现尽量少使用图片,多用线条完成。
【编码】
开发jQuery UI/Effect 插件在很多时候都需要与UI交互,因此在呈现上需要提供Html tree来绘制我们的插件,最终通过js dom来输出,那么在绘制简单的dom结构的时候我会直接用js来完成,不过如果嵌套比较复杂的话,我们还是应该先用html来完成,然后转变成js输 出。
【扩展】
有的时候用户却不是那么容易满足,于是有人高呼:“我要自己设置value,为什么不提供这个功能?”。
那么这时我们就需要为用户公开一个方法,用于设置jSlider的value,首先考虑的是作为方法需要一个作用对象(jSlider),那么此时我又不 想将作用对象作为参数传入,那么我们还是将这个方法作为插件来开发,我们将方法命名为setSliderValue,开放2个参数,v(value值)和 callback(设置完成后的回调函数)。
【插件】
其实网上已经有成百上千种插件了,应该可以满足大家的需求了。
【小结】
通篇到这里就结束了,简单的介绍了一款jQuery插件的开发流程,以及开发中应该注意的细节,那么在下一篇的文章中我会向大家介绍如何打造一个通用型的自动完成 插件。
让Dreamweaver支持提示代码功能
要让Dreamweaver支持jQuery自动提示代码功能,方法很简单,下载一个插件—jQuery_API.mxp,以及cs4的jQuery语法提示插件 (详细步骤见参考资料 [2])。 在Dreamweaver里依次选择“命令”-> “扩展管理” -> “安装扩展” ->…,就会自动安装了。
成功后重启Dreamweaver,就大功告成了。
引入JQuery
在head标签内加入这个 <script src=JS/jquery-1.3.2.min.jstype="text/javascript"></script>
这是引用代码
<script type="text/javascript">
$(function(){})</script>
号外!号外!兄弟连开始招生了,
7月7日H5--12开始报名啦!
报名就有精美礼品相送!
咨询QQ:2186748369 兄弟连萌妹子
网址:www.h5xdl.com
从此我是你的人,你是我的粉,
欢迎勾搭,聊骚!!
更多精彩,关注兄弟连H5学院!
小片不定时更新,记得关注我哦!
以上是关于什么是Jquery!!的主要内容,如果未能解决你的问题,请参考以下文章