??xml version="1.0" encoding="utf-8" standalone="yes"?>
]]>
本文的写作灵 感源自读者关于先前一文章的电子邮g反馈Q该邮gq样写道 “jQuery 在简单的面上无可挑剔,但在复杂的页面上性能极其低下。在解决性能问题之前Q您必须对复杂页面用常规的 JavaScript?#8221; q立卌我想? “jQuery ?JavaScript 之间的性能比较会是什么样的?”事实上,我很看到将 jQuery 库与 JavaScript 或其? JavaScript 库进行比较的文章。我可能像大多数ZP仅看到用 jQuery ~写客户端代码的易,而忽略了可能的性能问题。在我看来,在易用性和性能之间q行折衷是值得的。但是,存在q样一U折衷吗QjQuery 是不是比 “一?#8221; ?JavaScript 慢?jQuery 是不是比其他库慢Q本文将试解答q些问题?
度量 JavaScript 性能要考虑的最重要问题是执?JavaScript 的环境。因Z码是q行在客L上的Q所以它的执行依赖于客户端计机Q这使得客户端机器成为媄响性能的最重要因素。很明显Q运?4 ?CPU 的新服务器执行代码的速度肯定要比 400 MHz 老式处理器快。这是毫无疑问的。不q,׃您不能控?Web 应用E序用户用于讉K您的站点的机器,所以在度量性能时要考虑关于g的许多因素?/p>
JavaScript 性能的另一个重要方面是用于q行 JavaScript 的浏览器QJavaScript 新手可能不容易发觉这个媄响因素。每个浏览器内部都包含一? JavaScript 引擎Q即用于解析和执?JavaScript 代码q处?Web 应用E序面的本Z码。因此,JavaScript 的性能严重依赖于客L使用的浏览器Qƈ且在某些情况下,?em>可以 控制用户使用的浏览器。本文提供一些关?JavaScript 性能的指导原则,q解释不同浏览器Ҏ能的媄响?/p>
最 后,在ȝ JavaScriptQ尤其是 jQuery 的性能之后Q我确定一些能够改q?jQuery 代码性能的最佛_践,充分利用q行得最快的代码部分Q而尽量避免运行得最慢的代码部分。在您阅d本文之后Q?#8220;jQuery 的性能好吗” q个问题得到解{,q且l我发送那电子邮件的Z知道他的断a是否正确?/p>
? 于性能试的第一步是创徏一个合适的性能试。jQuery 以及其他 JavaScript 库在代码中扮演的最重要角色是使用选择查找特定面元素。我在最初的性能试中就以这斚w为重炏V一个良好的性能试应该真正地发? JavaScript 库的全部力量Q用包含数千个页面元素的面试它。应该运行所有选择ҎQ让我看到哪个选择Ҏ最快,哪个最慢。测试应该事先知道正的{案Q从而确? JavaScript 库是否正地执行选择Ҏ。最后,应该昄所有结果,q带所用的q行旉Q让我能够在所有库之间q行比较?/p>
我差点忽略了性能试的最重要斚wQ它应该是免费的。毕竟这个系列文章的不成文规则就是相互利用彼此的成果Q因此我l箋发扬q种_Q在此用一个现成的 JavaScript 库性能试。这个测试称?SlickSpeed Selectors TestQ见 参考资?/a>Q,
它非帔R合我的需求。它?jQuery 1.2.6Q撰写本文时的最新版本)与其?4 个流行的 JavaScript
库(MooTools、Prototype、YUI ?DojoQ进行比较。然后,它用带有数千个面元素的页面运?40
个选择试。换句话_q是我所希望的最x能试。我在W一个性能试分析中用该试?/p>
对于W一个性能试Q我使用的运行环境是 2.2 GHz 处理器? GB RAM ?Firefox 3.0.3Q非帔R要)。我在该配置下运?5 ơ测试,?1 昄?5 ơ运行的q_l果?/p>
从第一ơ测试能够得Z么结论?现在我们仅关注Ml果Q而不是每ơ测试。在获得一些Ml论之后Q我稍后在本文中关注每个测试?/p>
但是要记住,q些l论仅基于一个浏览器的结果。这是基?Firefox 3.0.3 得出的结论。现在我们进入下一节Q我在不同的浏览器上运行该试?/p>
?
对不同浏览器q行 JavaScript 会得出的不同l果Q性能和时间都不同Q,许多初 Web E序员觉得不可思议。尽这对初U?Web
E序员而言是个挫折Q他们担心要~写额外的代码来处理不同的浏览器Q,但是有经验的 Web E序员在 Netscape ?Internet
Explorer 的早期就知道如何处理该问题。这也是使用 JavaScript 库的一个亮点,因ؓ它们都}慎处理许多或大部分浏览器差异? JavaScript
速度差异的主要原因是每个览器都使用自己?JavaScript 引擎。JavaScript 引擎是用于解?JavaScript q根?
Web 应用E序执行它的本机代码。因此,JavaScript
的执行速度与底层引擎直接相兟뀂在最q几个月Q许多浏览器公司来关注他们的览器的性能Q这是有原因的。随着某些面?JavaScript
变得日益复杂QJavaScript 引擎的快慢能够媄?Web 应用E序的响应速度。因此,?Google ?Firefox
{公司谈论它们的 JavaScript 引擎Ӟ它们׃谈及下一代引擎的速度要快 10 倍。这?Web 应用E序而言是很重要的,因ؓ底层
JavaScript 引擎的速度直接D更复杂的 Web 应用E序的出现?/p>
现在Q您知道 JavaScript 引擎?
JavaScript 执行速度的一个因素,那么让我们在不同的浏览器上运行刚才在 Firefox 上运行的试Qƈ试扑և不同的引擎对
JavaScript 性能的媄响。记住,q个试与我前面?Firefox 上运行的试是一LQ因此除?JavaScript
引擎以外Q其他所有东襉K是相同的。图 2 昄了测试结果?/p>
?
完这些测试结果之后,您首先注意到的是在这些浏览器中运行得到的旉差很大。在 Chrome 1.0 上运?jQuery 需?168
毫秒Q而在 IE6 上运行需?1728 U。这是难以置信的旉差!jQuery 选择Ҏ?IE6 上运行比?Chrome 上运行慢 10
倍!现在Q您知道Z?Google 喜欢夸耀它的 JavaScript 引擎Q以及ؓ什么某些浏览器很少介绍自己?JavaScript
引擎。这些差别还是比较大的?/p>
您应该注意到QjQuery ?Firefox 或一些其他浏览器上运行时速度排在W?3
位,而在另一些浏览器上排在第 1
位。事实上Q这些结果表明,Ҏ性能q行分类的话Q这些库可以分ؓ两组Q而不用什么浏览器。Mootools、Dojo ?jQuery
通常属于一个组别,?Prototype ?YUI 属于另一个组别,前一l要比后一l快得多?/p>
我觉得所有这些结论都需要专门花一个小节进行阐qͼ因ؓ它们?JavaScript 开发h员非帔R要。我仍然试ȝ上面的性能l果Qƈ且没有忘记本文是?jQuery Z题的?/p>
l论 1QMootools、jQuery ?Dojo 在性能斚w不分上下?/strong>
l论 2QPrototype ?YUI 的性能很慢?/strong>
l论 3Q如果对性能要求比较高时Q选择 Mootools、jQuery ?Dojo 之一获得的性能几乎一栗?/strong>
l论 4Q如果对性能要求比较高时Q不要选择 Prototype ?YUI?/strong>
l论 5Q浏览器Ҏ能的媄响是 JavaScript 库的 9 倍?/strong>
l论 6Q如?JavaScript 性能?Web 应用E序很重要,q且您可以控刉择什么浏览器Q那么就选择最快的览器!
l论 7Q如果您不能控制用户使用的浏览器Q那么要首先考虑?IE6 上的性能?/strong>
?
文的W二部分讨论如何改q?jQuery 代码的性能。前一部分表明选择 jQuery 作ؓ JavaScript
库指向了正确的性能方向。如果您正在阅读本文Q您可能已经使用?
jQuery。但是底层库速度快ƈ不意味着您编写的所有代码都是高质量的。如果您没有回过头来x应该怎么做,使用 jQuery
仍然会编写出非常慢的代码?/p>
q个部分介绍一些性能调优知识Q以及改q?jQuery 代码速度的最佛_跉|巧?
技?#1 - 可能多地通过 ID q行搜烦Q而不?CLASS
前面q行?jQuery 性能试l果支持q一数据。让我们查看每个试Q看看需要注?jQuery 代码的什么地斏V在q个例子中,分别看看通过 ID ?CLASS q行搜烦时的试l果Q图 5Q?/p>
q?
些测试是不同的,但它们得出的数据表明通过 ID q行搜烦比通过 CLASS q行搜烦快得多。这如何影响?jQuery
代码Q在~写搜烦Ӟ您要Cq些技巧:如果既可选择 CLASS 又可选择 IDQ那么通常要选择
ID。如果需要在您的代码中搜索某些元素,一定要l它们分?ID?/p>
清单 1 昄了一个实际的 jQuery 试Q您可以在您的机器上q行它对此进行验证: ID 试耗时 218 毫秒Q?CLASS 试耗时 19.9 U!甚至在专门ؓ该测试构建的单页面上QID 搜烦也要?CLASS 搜烦?100 倍! 技?#2 - 提供可能多的搜索信?/strong>
考虑到底?JavaScript 代码之后Q这׃ؓ奇了。通过提供元素标记Q与 CLASS 参数匚w的搜索元素数量将大大减少Q从而将搜烦性能提升至与本例中的 ID 搜烦相当? 开发h员在~写 jQuery 选择Ҏ时不能偷懒,管 jQuery 的简单让Z生偷懒的Ʋ望。简单让您放松了警惕。搜索机制变得如此简单,让我们們于仅输入一条信息。然而,您应该L可能多地输入信息,其是已知信息。清?2 昄了一个很好的例子?
技?#3 - ~存选择?/strong>
清单 3 l出了一些关于如何利用缓存的例子?/p>
在我的最后一个关于性能的示例代码中Q将查看我在本系列的W一文章中提到的小部gQ见 参考资?/a>Q。这个小部g是在表的左上角上的复选框Q它允许您选择或取消选择该列上的所有复选框。这个小部g在电子邮件应用程序中非常常见Q用于选择或取消选择所有消息?
?
?JavaScript Ӟ速度和性能l对不是问题。在现实中,创徏 jQuery 的开发h员和处理览器内|?JavaScript
引擎的开发h员都非常x性能问题。事实上Q在最q?6 个月以来Q浏览器开发的最重要问题是 JavaScript
引擎的速度。浏览器开发者都致力于在下一q迅速提?JavaScript 的执行性能Q从而大大提?jQuery 代码?JavaScript
引擎的速度。来自这?“速度之战” 的消息表明,提升 JavaScript 性能是大势所。领?jQuery 目?John Resig
一直都在谈Z的最?“Sizzle” 选择引擎。他从头~写了一个选择引擎Qƈ声称初步l果表明它比 Firefox 要快 4
倍。这是巨大的速度提升Q在我撰写本文的最后部分时QjQuery 1.3 已经发布Qƈ且包含了 Sizzle 选择引擎。jQuery
声称Q在所有浏览器上运行的Ml果表明选择引擎?1.3 版本?1.2.6 版本的快 49%。此外,1.3 发布版在 HTML 注入Q向
DOM d新的元素Q上改进?6 倍,在函数定位上改进?3 倍。在我完成本文时Q很多h都更新到了最新的 jQuery
发布版,q是非常令hȀ动的Q?/p>
影响 JavaScript 性能的另一个因素是览器,如前所qͼ它的影响是所选的库的 9
倍。Firefox ?Chrome ?“最?JavaScript 引擎” 之战中各有胜负,?Safari
的参与让竞争更加Ȁ烈。从我们上面的测试中Q可以看?Chrome ?JavaScript 引擎性能斚wq远过 FirefoxQ但?
Firefox 3.1 包含新?Tracemonkey JavaScript 引擎Q届时其速度比当前?JavaScript 引擎
3.0 ?20 ?40 倍(q是他们声称的,不是我的观点Q,真不可思议Q? 在未来一两年内,您将看到底层 JavaScript 引擎?JavaScript 库的速度得到巨大改进Q从而导致?JavaScript ?Web 应用E序变得更加复杂?/p>
?
果您正在军_是?JavaScript 库还是自q?JavaScriptQ那么需要考虑的另一件事情是处理和调?JavaScript
库所需的全部工作。最q几q以来,有数百位用户一直在l护库中的每一个函数。您可能要忙到深夜,甚至{疲力尽地编写自q函数。您更相信谁呢?另外Q即?
您能~写出比 jQuery 库更快的代码Q您是否惌使用 jQuery
库能够获得更多的优势Q您是否Z辛苦地编写自q代码而放弃用非怾利的 jQuery
及其函数库?自己~写代码不仅需要大量时_q且q会产生更多 bugQ因此我q是使用现成?jQuery 库? 我最后讨论的要点可能会让一些h沮Q但是我们必考虑~写q些 jQuery
库的E序员。他们当中的一些是最的Qƈ且他们编写的优秀的代码(一般h不能~写q样的代码)都收入到q些库中。我承认自己q远不如~写
jQuery 库的E序员。因此,Z不利用他们的智慧Q? ?
文从M上讨Z jQuery ?JavaScript 库的性能。通过寚w择Ҏq行大量的测试,您看到这些库之间的速度存在巨大的差距,q且
jQuery 是最快的库之一。不q,即您选择了最快的 JavaScript 库,q是不能解决 Web
应用E序的性能问题Q因为浏览器Ҏ能的媄响比库强 9 倍。如果您能够控制用户使用特定?Web
览器,那么p他们使用最快的览器。找到能够最快地q行您的 Web 应用E序的浏览器Qƈ让用户通过使用它从中受益。理x况下Q让最慢的
JavaScript 览器消失意味着出现更快?Web 应用E序?/p>
我还提供了关?jQuery 性能?3 个技巧。尽有好几个站炚w提供了关?jQuery 性能的技巧,但是q?3 个技巧是最有效的? 个技巧肯定比 50 个技巧容易记住,但其他技巧也是很好的Q我在 参考资?/a> 部分指出另外一些技巧。不q,如果您在~写代码时记住了q?3 个技巧,会获得巨大的性能提升。应该永q记住的 3 ?jQuery 技巧是Q通过 ID 搜烦比通过 CLASS 搜烦?100 倍,可能多地提供搜索信息,以及量~存选择?/p>
最
后,我们快速查看了 jQuery 和浏览器?JavaScript 引擎卛_推出的改q。在我撰写本文的l尾部分ӞjQuery 1.3
已经发布了,它承诺在选择和代码的其他斚w实现跌式性能改进。此外,Firefox q承诺它的下一?JavaScript 引擎会快 20 ?
40 倍!q些q象表明Q在未来的一两年内,JavaScript 环境会在性能上取得重大突破。在不久的将来,复杂?Web
应用E序会日益流行,因ؓ快速运行这些程序的条g已经成熟?/p>
在本文结束时Q我们应该回q头来重新检验这句话 “jQuery
在简单的面上无可挑剔,但在复杂的页面上性能极其低下。在解决性能问题之前Q您必须对复杂页面用常规的
JavaScript?#8221;Ҏ我的l验QjQuery ?“性能问题” 一样出现在 “常规?JavaScript”
中。事实上Q真正媄响性能的不?jQuery ?JavaScriptQ而是览器。因此我同意q样的观点:使用设计不良?jQuery
代码的复杂页面运行在 IE6 上时会导致糟p的性能。不q,我希望您已经了解我要阐述的思想Q只要拥有良好的 jQuery 代码、运?3
个最重要的技巧ƈ选择最快的览器,那么即ɘq行最复杂的页面也不会出现明显的性能问题?/p>
废话说Q直接进入正题,我们先来看一些简单的ҎQ这些方法都是对jQuery.ajax()q行装以方便我们用的ҎQ当Ӟ如果要处理复杂的逻辑Q还是需要用到jQuery.ajax()?q个后面会说?. 1. load( url, [data], [callback] ) Q蝲入远E?HTML 文g代码q插入至 DOM 中?/font> url (String) : h的HTML늚URL地址?/p>
data (Map) : (可选参? 发送至服务器的 key/value 数据?/p>
callback (Callback) : (可选参? h完成?不需要是success?/font>)的回调函数?/p>
q个Ҏ默认使用 GET 方式来传递的Q如果[data]参数有传递数据进去,׃自动转换为POST方式的。jQuery 1.2 中,可以指定选择W,来筛选蝲入的 HTML 文档QDOM 中将仅插入筛选出?HTML 代码。语法Ş?"url #some > selector"?/p>
q个Ҏ可以很方便的动态加载一些HTML文gQ例如表单?/p>
CZ代码Q?/p>
注:不知道ؓ什么URL写绝对\径在FF下会出错Q知道的ȝ告诉下。下面的get()和post()CZ使用的是l对路径Q所以在FF下你会出错q不会看到返回结果?font color="#ff00ff">q有get()和post()CZ都是跨域调用的,发现传上来后没办法获取结果,所以把q行按钮L了?/font> 2. jQuery.get( url, [data], [callback] )Q用GET方式来进行异步请?/font> 参数Q?/p>
url (String) : 发送请求的URL地址. data (Map) : (可? 要发送给服务器的数据Q以 Key/value 的键值对形式表示Q会做ؓQueryString附加到请求URL中?/p>
callback (Function) : (可? 载入成功时回调函?只有当Response的返回状态是success才是调用该方??/p>
q是一个简单的 GET h功能以取代复?$.ajax 。请求成功时可调用回调函数。如果需要在出错时执行函敎ͼ请?$.ajax。示例代码: 点击发送请求: jQuery.get()回调函数里面?this Q指向的是Ajaxh的选项配置信息Q?/p>
3. jQuery.post( url, [data], [callback], [type] ) Q用POST方式来进行异步请?/font> 参数Q?/p>
url (String) : 发送请求的URL地址. data (Map) : (可? 要发送给服务器的数据Q以 Key/value 的键值对形式表示?/p>
callback (Function) : (可? 载入成功时回调函?只有当Response的返回状态是success才是调用该方??/p>
type (String) : (可?官方的说明是QType of data to be sent。其实应该ؓ客户端请求的cd(JSON,XML,{等) q是一个简单的 POST h功能以取代复?$.ajax 。请求成功时可调用回调函数。如果需要在出错时执行函敎ͼ请?$.ajax。示例代码: Ajax.aspxQ?/p>
jQuery 代码Q? 点击提交Q?/p>
q里讄了请求的格式?json"Q?/p>
如果你设|了h的格式ؓ"json"Q此时你没有讄Response回来的ContentType 为:Response.ContentType = "application/json"; 那么你将无法捕捉到返回的数据?/p>
注意一下,alert(data.result); ׃讄了Accept报头?#8220;json”Q这里返回的data是一个对象,q不需要用eval()来{换ؓ对象?/p>
4. jQuery.getScript( url, [callback] ) : 通过 GET 方式h载入q执行一?JavaScript 文g?/font> url (String) : 待蝲?JS 文g地址?/p>
callback (Function) : (可? 成功载入后回调函数?/p>
jQuery 1.2 版本之前QgetScript 只能调用同域 JS 文g?1.2中,您可以跨域调?JavaScript 文g。注意:Safari 2 或更早的版本不能在全局作用域中同步执行脚本。如果通过 getScript 加入脚本Q请加入延时函数?/p>
q个Ҏ可以用在例如当只有编辑器focus()的时候才d载编辑器需要的JS文g.下面看一些示例代码: 加蝲q执?test.js? jQuery 代码: $.getScript("test.js"); 加蝲q执?AjaxEvent.js Q成功后昄信息?/p>
jQuery 代码: 加蝲完后请重新点M下上面的 Load h看看有什么不同?/p>
jQuery Ajax 事g Ajaxh会生若q不同的事gQ我们可以订阅这些事件ƈ在其中处理我们的逻辑。在jQueryq里有两UAjax事gQ局部事??全局事g?/p>
局部事?/strong>是在每ơ的Ajaxh时在Ҏ内定义的Q例如: 全局事g是每ơ的Ajaxh都会触发的,它会向DOM中的所有元素广播,在上?getScript() CZ中加载的脚本是全局Ajax事g。全局事g可以如下定义Q?/p>
或者: 我们可以在特定的h全局事g用Q只要设|下 global 选项可以了Q?/p>
下面是jQuery官方l出的完整的Ajax事g列表Q?/p>
具体的全局事g请参考API文档。好了,下面开始说jQuery里面功能最强的AjaxhҎ $.ajax(); jQuery.ajax( options ) : 通过 HTTP h加蝲q程数据 q个是jQuery 的底?AJAX 实现。简单易用的高层实现?$.get, $.post {?/p>
$.ajax() q回其创建的 XMLHttpRequest 对象。大多数情况下你无需直接操作该对象,但特D情况下可用于手动终止请求?/p>
注意Q?/strong> 如果你指定了 dataType 选项Q请保服务器返回正的 MIME 信息Q??xml q回 "text/xml")。错误的 MIME cd可能D不可预知的错误。见 Specifying the Data Type for AJAX Requests 。当讄 datatype cd?'script' 的时候,所有的q程(不在同一个域?POSTh都回转换为GET方式?/p>
$.ajax() 只有一个参敎ͼ参数 key/value 对象Q包含各配置及回调函C息。详l参数选项见下?/p>
jQuery 1.2 中,您可以跨域加?JSON 数据Q用时需数据类型设|ؓ JSONP。?JSONP 形式调用函数Ӟ?"myurl?callback=?" jQuery 自动替?? 为正的函数名,以执行回调函数。数据类型设|ؓ "jsonp" ӞjQuery 自动调用回调函数?q个我不是很? 参数列表Q?/p>
预期服务器返回的数据cd。如果不指定QjQuery 自动根?HTTP ?MIME 信息q回 responseXML ?responseTextQƈ作ؓ回调函数参数传递,可用? "xml": q回 XML 文档Q可?jQuery 处理?/p>
"html": q回U文?HTML 信息Q包?script 元素?/p>
"script": q回U文?JavaScript 代码。不会自动缓存结果?/p>
"json": q回 JSON 数据 ?/p>
"jsonp": JSONP 格式。?JSONP 形式调用函数Ӟ?"myurl?callback=?" jQuery 自动替?? 为正的函数名,以执行回调函数?/p>
q里有几个Ajax事g参数Q?strong>beforeSend Q?strong>success Q?strong>complete Qerror ?/strong>我们可以定义q些事g来很好的处理我们的每一ơ的Ajaxh。注意一下,q些Ajax事g里面?this 都是指向Ajaxh的选项信息?请参考说 get() Ҏ时的this的图?。请认真阅读上面的参数列表,如果你要用jQuery来进行Ajax开发,那么q些参数你都必需熟知的?/p>
q里显C首|章列表?/p>
其他 jQuery.ajaxSetup( options ) : 讄全局 AJAX 默认选项?/font> 讄 AJAX h默认地址?"/xmlhttp/"Q禁止触发全局 AJAX 事gQ用 POST 代替默认 GET Ҏ。其后的 AJAX h不再讄M选项参数?/p>
jQuery 代码: serialize() ?serializeArray() serialize() : 序列表表格内容ؓ字符丌Ӏ?/p>
serializeArray() : 序列化表格元?(cM '.serialize()' Ҏ) q回 JSON 数据l构数据?/p>
CZQ?/p>
HTML代码Q?/p>
serializeArray() l果为: 一些资?/font> 一个jQuery的Ajax Form表单插gQ?a style="background-color: rgb(255,255,245)" fade="329209619" jquery1209889101078="27">http://www.malsup.com/jquery/form/ 一个专门生成Loading囄的站点:http://ajaxload.info/ 大家觉得那些Loading比较炫的可以在这里跟帖晒一下,方便大家取用Q嘎?/p>
解决:
jquery和prototype冲突解决, |上传的一文?我这里测试结果是错误? http://ajaxbbs.net/blog/post/71/
另一U方式是: 参? http://www.d5s.cn/archives/6, 但我q里试也有问题!
本h试通过的方?
1、将jquery.js攑ֈprototype.js前面Q这个是必须?Q?br />
2、在jquery.js后面?变量重命名?br />
Ҏ如下Q?
<script type="text/javascript" src="jquery.js"></script> <script type="text/javascript" type="text/javascript" src="window.js"></script> 3、将原来使用?Ҏ名一律替换ؓjQuery名,?("obj")替换为jQuery("obj")?
例如下面的一D代? 混合?jQuery和基于Prototype?EasyValidation:
<!-- jquery, 注意加蝲序 --> <!-- 表单验证 --> <div id="contents"></div> *密码(重复): <input type='submit' value='Submit'/> 1、关于页面元素的引用 通过jquery?()引用元素包括通过id、class、元素名以及元素的层U关pddom或者xpath条g{方法,且返回的对象为jquery对象Q集合对象)Q不能直接调用dom定义的方法?/p>
2、jQuery对象与dom对象的{?/strong> 只有jquery对象才能使用jquery定义的方法。注意dom对象和jquery对象是有区别的,调用Ҏ时要注意操作的是dom对象q是jquery对象?br />
普通的dom对象一般可以通过$()转换成jquery对象?br />
如:$(document.getElementById("msg"))则ؓjquery对象Q可以用jquery的方法?br />
׃jquery对象本n是一个集合。所以如果jquery对象要{换ؓdom对象则必d出其中的某一,一般可通过索引取出?br />
如:$("#msg")[0]Q?("div").eq(1)[0]Q?("div").get()[1]Q?("td")[5]q些都是dom对象Q可以用dom中的ҎQ但不能再用Jquery的方法?br />
以下几种写法都是正确的: $("#msg").html(); 3、如何获取jQuery集合的某一?/strong> 对于获取的元素集合,获取其中的某一(通过索引指定Q可以用eq或get(n)Ҏ或者烦引号获取Q要注意Qeqq回的是jquery对象Q而get(n)和烦引返回的是dom元素对象。对于jquery对象只能使用jquery的方法,而dom对象只能使用dom的方法,如要获取W三?lt;div>元素的内宏V有如下两种ҎQ?/p>
$("div").eq(2).html(); //调用jquery对象的方?br />
$("div").get(2).innerHTML; //调用dom的方法属?/span> 4、同一函数实现set和get Jquery中的很多Ҏ都是如此Q主要包括如下几个: $("#msg").html(); //q回id为msg的元素节点的html内容?br />
$("#msg").html("<b>new content</b>"); $("#msg").text(); //q回id为msg的元素节点的文本内容?br />
$("#msg").text("<b>new content</b>"); $("#msg").height(); //q回id为msg的元素的高度 $("input").val("); //q回表单输入框的value?br />
$("input").val("test"); //表单输入框的valueD为test $("#msg").click(); //触发id为msg的元素的单击事g 同样blur,focus,select,submit事g都可以有q两U调用方?/p>
5、集合处理功?/strong> 对于jqueryq回的集合内Ҏ需我们自己循环遍历q对每个对象分别做处理,jquery已经为我们提供的很方便的Ҏq行集合的处理?br />
包括两种形式Q?/p>
6、扩展我们需要的功能 $.extend({ 使用扩展的方法(通过“$.Ҏ?#8221;调用Q: alert("a=10,b=20,max="+$.max(10,20)+",min="+$.min(10,20)); 7、支持方法的q写 例如Q?/p>
$("p").click(function(){alert($(this).html())}) 8、操作元素的样式 主要包括以下几种方式Q?/p>
$("#msg").css("background"); //q回元素的背景颜?br />
$("#msg").css("background","#ccc") //讑֮元素背景为灰?br />
$("#msg").height(300); $("#msg").width("200"); //讑֮宽高 9、完善的事g处理功能 Jquery已经为我们提供了各种事g处理ҎQ我们无需在html元素上直接写事gQ而可以直接ؓ通过jquery获取的对象添加事件?br />
如: jQuery中几个自定义的事Ӟ Q?Qhover(fn1,fn2)Q一个模仿悬停事Ӟ鼠标UdC个对象上面及Udq个对象Q的Ҏ。当鼠标UdC个匹配的元素上面Ӟ会触发指定的W一个函数。当鼠标Udq个元素Ӟ会触发指定的W二个函数?/p>
//当鼠标放在表格的某行上时class|ؓoverQ离开时置为out?br />
$("tr").hover(function(){ Q?Qready(fn):当DOM载入qA可以查询及操U|l定一个要执行的函数?/p>
$(document).ready(function(){alert("Load Success")}) Q?Qtoggle(evenFn,oddFn): 每次点击时切换要调用的函数。如果点M一个匹配的元素Q则触发指定的第一个函敎ͼ当再ơ点d一元素Ӟ则触发指定的W二个函数。随后的每次点击都重复对q两个函数的轮番调用?/p>
//每次点击时轮换添加和删除名ؓselected的class?br />
$("p").toggle(function(){ Q?Qtrigger(eventtype): 在每一个匹配的元素上触发某cM件?br />
例如Q?br />
$("p").trigger("click"); //触发所有p元素的click事g Q?Qbind(eventtype,fn)Qunbind(eventtype): 事g的绑定与反绑?br />
从每一个匹配的元素中(dQ删除绑定的事g?br />
例如Q?br />
$("p").bind("click", function(){alert($(this).text());}); 10、几个实用特效功?/strong> 其中toggle()和slidetoggle()Ҏ提供了状态切换功能?br />
如toggle()Ҏ包括了hide()和show()Ҏ?br />
slideToggle()Ҏ包括了slideDown()和slideUpҎ?/p>
11、几个有用的jQueryҎ $.browser.览器类型:浏览器cd。有效参敎ͼsafari, opera, msie, mozilla。如是否ieQ?.browser.isieQ是ie览器则q回true?br />
$.each(obj, fn)Q通用的P代函数。可用于q似地P代对象和数组Q代替@环)?br />
?br />
$.each( [0,1,2], function(i, n){ alert( "Item #" + i + ": " + n ); }); {h于: 也可以处理json数据Q如 l果为: $.map(array, fn)Q数l映。把一个数l中的项?处理转换?保存到到另一个新数组中,q返回生成的新数l?br />
如: $.trim(str)Q删除字W串两端的空白字W? 12、解册定义Ҏ或其他类库与jQuery的冲H?/strong> 很多时候我们自己定义了$(id)Ҏ来获取一个元素,或者其他的一些jscd如prototype也都定义?ҎQ如果同时把q些内容攑֜一起就会引起变量方法定义冲H,JqueryҎ专门提供了方法用于解x问题?br />
使用jquery中的jQuery.noConflict();Ҏ卛_把变?的控制权让渡l第一个实现它的那个库或之前自定义?Ҏ。之后应用Jquery的时候只要将所有的$换成jQuery卛_Q如原来引用对象Ҏ$("#msg")改ؓjQuery("#msg")?br />
如: jQuery.noConflict(); $("p").each(function(i){this.style.color=['#f00','#0f0','#00f'][i]}) $("tr").each(function(i){this.style.backgroundColor=['#ccc','#fff'][i%2]}) $("p").click(function(){alert($(this).html())}) 使用jQuery,Ajax恐怕不能变得再单了. jQuery有一pd的函?可以使简单的事情变得真正?让复杂的事情也能变得可?br />
的简? Ajax的一个一般用法就是加载一Dhtml代码到页面上的某一区域. 要实现这?你只要简单的选中q个元素,然后使用load()函数. $('#stats').load('stats.html');通常,你可能需要向服务器端的页面传递一些参? 你可能猜C, 使用jQuery来实现的话会十分?你可以选择使用$.post()或?.get(), 当然要根据你的具体需? 如果需? 你可以传递一个可选的数据对象和一个回调函?Listing4是一个发送数据以及用回调函数的单例? [url=]Listing 4. Sending data to a page with Ajax[/url] 如果你真的想要一些复杂的Ajax代码,那就是用$.ajax()函数. 你可以指定数据类型ؓxml, html, script或者json, jQuery 会ؓ你自动准备好l果一遍你的回调函数能够立即用这些数? 你还可以讑֮ beforeSend, error, success, 以及 complete 回调函数来给用户一些ajax体验的更多提CZ? 另外,q有一些参?可以让你讄ajaxh的超时时?或者一个页面的"最后更?状? Listing5展示了一个获取xml文档q用我上面提到的一些参数的单例? [url=]Listing 5. Complex Ajax made simple with $.ajax()[/url] 当你成功的获得xml反馈的时? 你可以用jQuery来遍历xml文档,像你操作html的方式一?q操作一个xml文g以及整合内容到页面上变得十分的简? Listing6 扩展了success函数,Ҏxml文档里的每个<item>在页面上增加一个了list(列表)条目. [url=]Listing 6. Working with XML using jQuery[/url] jQuery是一个不错的javascript产品Q我曄xȝ一些javascript的一些常用功能,以备自己调用Q然而看了jQueryQ发C做的太强了,不得不向他学习?#8220;永远学习?#8221;Q但是也告诫自己Q不要被它们l住了双手,否则你的创造性就会被扼杀Q我当工具用,不必死计其语法,否则自己?#8220;?#8221;了。我希望有更多有创造性的产品出现?/p>
获取jQuery最新版本:http://jquery.com/src/ 一、基本操作: 1、当文档QdomQ加载完毕后Q立x行内容: 2、ؓ所有的A标记d一个事件?Q)当然也可以是其它的,L发挥吧?/font> 3、?font color="#ff6600">选择?/font>?font color="#ff6600">事g 注:id选择?号前~Q其下标记用空格隔开?font color="#808080">Q)是不是很Ҏ?br />
hover为其事gQ其它事件有click,mouseover,mouseout,change...{。可参?http://visualjquery.com 4、用q些选择器和事g你已l可以做很多的事情了Q但q里有一个更强的好东东! 注:find() 让你在已l选择的element中作条g查找,因此 $("#orderedlist).find("li") 像 $("#orderedlist li")一栗each()Ҏq代了所有的liQƈ可以在此基础上作更多的处理?大部分的Ҏ,如addClass(), 都可以用它们自己?each() 。在q个例子? html()用来获取每个li的html文本, q加一些文字,q将之设|ؓli的html文本?/p>
5、不希望某些特定的元素被选择。jQuery 提供了filter() 和not() Ҏ来解册个问?/p>
注:q个代码选择了所有的li元素Q然后去除了没有ul子元素的li元素。注意体会方便之极的css()ҎQƈ再次提醒请务必实际测试观察效果,比方说换个CSS样式呢?再加一个CSS样式呢?像这P$("li").not("[ul]").css("border", "1px solid black").css("color","red")?/p>
6、可以在子元素和属?elements and attributes)上用作过滤器Q比如你可能想选择所有的带有name属性的链接: 注:q个代码l所有带有name属性的链接加了一个背景色?/p>
6.1常见的情冉|以name来选择链接Q你可能需要选择一个有特点href属性的链接Q这在不同的览器下对href的理解可能会不一_所以我们的部分匚w("*=")的方式来代替完全匚w("=")Q?/p>
示例,比如一个FAQ的页面,{案首先会隐藏,当问题点LQ答案显C出来,jQuery代码如下Q?/p>
注:在点M件中的,我们?$(this).next() 来找到dt下面紧接的一个dd元素Q这让我们可以快速地选择在被点击问题下面的答案?/p>
7、除了选择同别的元素外,你也可以选择父的元素。可能你惛_用户鼠标Ud文章某段的某个链接时Q它的父U元?-也就是文章的q一D늪出显C,试试q个Q?/p>
8、在我们l箋之前我们先来看看q一步: jQuery会让代码变得更短从而更Ҏ理解和维护,下面?/p>
应用到我们的Hello world例子中,可以q样: Q)是不是很Ҏ呀Q多亏了jQuery团队的努力呀Q?/p>
?1. 性能试 1 的结?/strong>
对,与其他库相比QYUI 真的很慢。仔l查看每个测试,扑ևZ么这个库在选择元素l(例如 “p, a”Q时非常慢。对于要求具有很好性能的页面而言Q这个库是最差的选择?/li>
与其他两个库相比Q这 3 个库是非常快的,q且 Dojo 是它们当中最快的Q?jQuery 是最慢的。但是从全局考虑Q它们之间的速度是很接近的?/li>
?2. 性能试 2 的结?/strong>
查看它们在所?5 个浏览器上进行的试Q在求取q_g后,您可以看到这 3 个库的性能几乎是一L。(理想情况下,我们应该调查每个览器的市场份额。但是调整这些数字很难,因ؓ使用 JavaScript 库的站点不一定由 “q_用户” 讉KQ?/p>
?3. 试l果的^均|Mootools、jQuery ?DojoQ?/strong>
看看q两个库?5 个浏览器中的试l果?jQuery 的对比。在求取它们的^均g后,您可以发现这两个库的性能差别有多大。它们在L览器中q_?jQuery ?300%?/p>
?4. 试l果的^均|jQuery、Prototype ?YUIQ?/strong>
Ҏ以上的^均|选择q?3 个库之一比选择另外两个库之一能够获得更多的性能优势。从在所有浏览器上运行得出的q_值看Q它们的性能是相当的。因此,当您选择 JavaScript 库时Q选择q?3 个库之一是不会错的?/p>
如果要求 JavaScript 库具有较高的性能Q或者打创Z个大型的 JavaScript 目Q那么就不应该选择q两个库之一。这两个库的性能要比其他库逊色得多?
?
认ؓq是本文所有结Z最重要的结论。您可以在特定情况下讨论哪个 JavaScript
库最快,但它最l的影响却是很小的!对于性能而言Q浏览器的媄响比库本w要大得多。回一下图 3 和图 4 的^均|您可以看?3
个最快的库中Q最慢那个(DojoQ仅比最快那个(jQueryQ慢 15%。只?15%Q然而,您看?jQuery
在最快的览器(Chrome 1.0Q和最慢的览器(IE6Q上q行的速度差别Q这个差别竟然达?1000%Q从q两个数字看Q?5% ?
1000% 而言是微不道的。至此,关于 3 个较快的库中哪个是最快的争论可以停止了,因ؓ它们Ҏl结果的影响是微乎其微的?
?
某些情况下,您可以控制用什么浏览器讉K站点。如果能够控制用什么浏览器Q那么您是很幸q的。我q到这样幸q的目。在q种情况下,如果您拥有一
个复杂的 JavaScript 应用E序Q或者您认ؓ性能很重要,那么您就应该控制用户用于讉K Web
应用E序的浏览器。这些测试已l清楚地昄了浏览器的媄响。如果您?JavaScript 应用E序的访问量很大Q那么您可以告诉用户Q他?em>必须 使用 Chrome?/p>
?
是,在大部分情况下,我们都无法控制用户用什么浏览器讉K我们的站炏V不q,很大一部分用户都?IE 6
览|页。到目前为止的测试中Q这个浏览器?JavaScript 引擎是最慢的。但是由于仍然有大量用户使用它,q且良好?Web 设计需?
“适应最p糕的情?#8221;Q这意味着您可以考虑Ҏ IE6 设计您的 JavaScript 应用E序?/p>
?jQuery 代码中两U常见的搜烦技术是通过元素?ID q行搜烦和通过元素?CLASS q行搜烦。在使用常规 JavaScript ?JavaScript 库之前,通过 ID 查找面元素q是相当单的。可以?getElementById()
Ҏ快速找到元素。但是如果没?JavaScript 库,要查?CLASS 会更加困难,在必要情况下Q我们还通过在其 ID
中进行编码帮助查找。?jQuery Ӟ搜烦 CLASS 像搜烦面上的 ID
一L单,因此q两个搜索似乎是可互换的。然而实际情况ƈ非如此。通过 ID 搜烦比通过 CLASS 搜烦要快得多。当通过 ID
q行搜烦ӞjQuery 实际上仅使用内置?getElementById()
ҎQ但通过 CLASS q行搜烦时必遍历页面上的所有元素,以查扑配项。很明显Q当面大q且复杂时Q通过 CLASS q行搜烦会导致响应非常慢Q而通过 ID q行搜烦不会随着面变大而变慢?/p>
?5. ID 搜烦?CLASS 搜烦Ҏ
清单 1. CLASS ?ID
2
3 console.info("Start Test");
4 var d = new Date();
5 console.info(d.getSeconds() + " " + d.getMilliseconds());
6
7 var testBody = "";
8 for (var i=0; i<1000; i++)
9 {
10 testBody += "<div class='testable"+i+"'>";
11 }
12 $("body").append(testBody);
13 for (var i=0; i<1000; i++)
14 {
15 $(".testable"+i);
16 }
17
18 var d = new Date();
19 console.info(d.getSeconds() + " " + d.getMilliseconds());
20 console.time("Start ID Test");
21
22 testBody = "";
23 for (var i=0; i<1000; i++)
24 {
25 testBody += "<div id='testable"+i+"'>";
26 }
27 $("body").append(testBody);
28 for (var i=0; i<1000; i++)
29 {
30 $("#testable"+i);
31 }
32 var d = new Date();
33 console.info(d.getSeconds() + " " + d.getMilliseconds());
34 console.info("End Test");
35 });
jQuery 提供如此多的面元素搜烦ҎQ有时您难以指出哪种Ҏ是最好的。有一条经验是不会错的Q即为搜索参数提供尽可能多的信息。因此,假如您正在搜索带?“clickable” CLASS 的所有页面元素,如果您提前知道仅?DIV
附带?CLASSQ那么就能提高搜索性能。所以,搜烦 “div.clickable” 会更加快。图 6 昄了支持该技巧的l果?/p>
?6. 可能多地提供信?/strong>
清单 2. 提供充的信?br />
2 // these fields before they are submitted, and there are hundreds of other
3 // elements on the page as well
4 <input type=text class="notBlank">
5
6 // the "bad" way to validate these fields
7 $(".notBlank").each(function(){
8 if ($(this).val()=="")
9 $(this).addClass("error");
10 });
11
12 // the "good" way to validate these fields
13 $("input.notBlank").each(function(){
14 if ($(this).val()=="")
15 $(this).addClass("error");
16 });
17
18 // the "best" way to validate these fields
19 $("input:text.notBlank").each(function(){
20 if ($(this).val()=="")
21 $(this).addClass("error");
22 });
最
后一个性能技巧利用了几乎所?jQuery 选择器都q回 jQuery
对象q个Ҏ。这意味着在理想的情况下,您仅需要运行选择器一ơ,q且能够L地将所有函数连接在一P或缓存结果供以后使用。您也不要担心缓存,因ؓ?
M可用内存相比Q返回的对象是很的?
清单 3. ~存
2 // when a button is pressed. These DIV's might reappear later when
3 // working with the page, so the button can be pressed any number of
4 // times, and the DIV's that have reappeared
5 // will again be made to be hidden.
6
7 $("#ourHideButton").click(function(){
8 $(".hideable").hide();
9 });
10
11 // As you saw in the CLASS versus ID example, though, a search for
12 // CLASS is very inefficient
13 // If this button is pressed often, it could lead to a slow response
14 // Instead of the above example, you should write your code like this
15
16 var hideable;
17
18 $("#ourHideButton").click(function(){
19 if (hideable)
20 hideable.hide();
21 else
22 hideable = $(".hideable").hide();
23 });
24
25 // You can cache your search in a JavaScript variable and reuse it every time
26 // the button is pressed. Because jQuery almost always returns the
27 // jQuery object, you can save it the first time it is called for future use
28
清单 4. 性能改进
2 // if we can improve the performance in any way from the things we learned here
3
4 function selectAll()
5 {
6 var checked = $("#selectall").attr("checked");
7 $(".selectable").each(function(){
8 var subChecked = $(this).attr("checked");
9 if (subChecked != checked)
10 $(this).click();
11 });
12 }
13
14 // Here's the improved function. The search for the ID of "selectall" is
15 // OK as-is, because we saw how fast the ID search is.
16 // The search for the CLASS of "selectable" was not well-designed though,
17 // because we saw a search by CLASS is very inefficient.
18 // First step was improving the search by supplying as much information as we know.
19 // We narrowed the search to only checkboxes with the CLASS of selectable.
20 // This should improve our search
21 // Further, we can cache this search because we will only need to perform it once
22 // Finally, we can perform this search before the selectall checkbox is even
23 // checked (when the page is finished loading), so that the search is completed
24 // and cached before the user even uses it.
25 // These 3 simple performance steps gave me a 200% increase in speed when tested
26 // on a page with 200 rows of data.
27
28 var selectable = $(":checkbox.selectable");
29 function selectAll()
30 {
31 var checked = $("#selectall").attr("checked");
32 selectable.each(function(){
33 var subChecked = $(this).attr("checked");
34 if (subChecked != checked)
35 $(this).click();
36 });
37 }
38
$(".ajax.load").load("http://www.cnblogs.com/QLeelulu/archive/2008/03/30/1130270.html .post",
function (responseText, textStatus, XMLHttpRequest){
this;//在这里this指向的是当前的DOM对象Q即$(".ajax.load")[0]
//alert(responseText);//hq回的内?/span>
//alert(textStatus);//h状态:successQerror
//alert(XMLHttpRequest);//XMLHttpRequest对象
});
$.get("./Ajax.aspx", {Action:"get",Name:"lulu"}, function (data, textStatus){
//q回?data 可以?xmlDoc, jsonObj, html, text, {等.
this; // 在这里this指向的是Ajaxh的选项配置信息Q请参考下?/span>
alert(data);
//alert(textStatus);//h状态:successQerror{等?
当然q里捕捉不到errorQ因为error的时候根本不会运行该回调函数
//alert(this);
});
Response.ContentType = "application/json";
Response.Write("{result: '" + Request["Name"] + ",你好Q?q消息来自服务器)'}");
$.post("Ajax.aspx", { Action: "post", Name: "lulu" },
function (data, textStatus){
// data 可以?xmlDoc, jsonObj, html, text, {等.
//this; // q个Ajaxh的选项配置信息Q请参考jQuery.get()说到的this
alert(data.result);
}, "json");
参数
$.getScript("AjaxEvent.js", function(){
alert("AjaxEvent.js 加蝲完成q执行完?你再点击上面的Get或Post按钮看看有什么不同?");
});
$.ajax({
beforeSend: function(){
// Handle the beforeSend event
},
complete: function(){
// Handle the complete event
}
// ...
});
$("#loading").bind("ajaxSend", function(){
$(this).show();
}).bind("ajaxComplete", function(){
$(this).hide();
});
$("#loading").ajaxStart(function(){
$(this).show();
});
$.ajax({
url: "test.html",
global: false,// 用全局Ajax事g.
// ...
});
参数?/font>
cd
描述
url
String
(默认: 当前地址) 发送请求的地址?/td>
type
String
(默认: "GET") h方式 ("POST" ?"GET")Q?默认?"GET"。注意:其它 HTTP hҎQ如 PUT ?DELETE 也可以用,但仅部分览器支持?/td>
timeout
Number
讄h时旉Q毫U)。此讄覆盖全局讄?/td>
async
Boolean
(默认: true) 默认讄下,所有请求均为异步请求。如果需要发送同步请求,请将此选项讄?false。注意,同步h锁住浏览器Q用户其它操作必ȝ待请求完成才可以执行?/td>
beforeSend
Function
发送请求前可修?XMLHttpRequest 对象的函敎ͼ如添加自定义 HTTP 头。XMLHttpRequest 对象是唯一的参数?
function (XMLHttpRequest) {
this; // the options for this ajax request
}
cache
Boolean
(默认: true) jQuery 1.2 新功能,讄?false 不会从览器缓存中加蝲h信息?/td>
complete
Function
h完成后回调函?(h成功或失败时均调?。参敎ͼ XMLHttpRequest 对象Q成功信息字W串?
function (XMLHttpRequest, textStatus) {
this; // the options for this ajax request
}
contentType
String
(默认: "application/x-www-form-urlencoded") 发送信息至服务器时内容~码cd。默认值适合大多数应用场合?/td>
data
Object, String
发送到服务器的数据。将自动转换求字W串格式。GET h中将附加?URL 后。查?processData 选项说明以禁止此自动转换。必Mؓ Key/Value 格式。如果ؓ数组QjQuery 自动ؓ不同值对应同一个名U。如 {foo:["bar1", "bar2"]} 转换?'&foo=bar1&foo=bar2'?/td>
dataType
String
error
Function
(默认: 自动判断 (xml ?html)) hp|时将调用此方法。这个方法有三个参数QXMLHttpRequest 对象Q错误信息,Q可能)捕获的错误对象?
function (XMLHttpRequest, textStatus, errorThrown) {
// 通常情况下textStatus和errorThown只有其中一个有?
this; // the options for this ajax request
}
global
Boolean
(默认: true) 是否触发全局 AJAX 事g。设|ؓ false 不会触发全局 AJAX 事gQ如 ajaxStart ?ajaxStop 。可用于控制不同的Ajax事g
ifModified
Boolean
(默认: false) 仅在服务器数据改变时获取新数据。?HTTP ?Last-Modified 头信息判断?/td>
processData
Boolean
(默认: true) 默认情况下,发送的数据被转换为对?技术上讲ƈ非字W串) 以配合默认内容类?"application/x-www-form-urlencoded"。如果要发?DOM 树信息或其它不希望{换的信息Q请讄?false?/td>
success
Function
h成功后回调函数。这个方法有两个参数Q服务器q回数据Q返回状?
function (data, textStatus) {
// data could be xmlDoc, jsonObj, html, text, etc...
this; // the options for this ajax request
}
CZ代码Q获取博客园首页的文章题目:
$.ajax({
type: "get",
url: "http://www.cnblogs.com/rss",
beforeSend: function(XMLHttpRequest){
//ShowLoading();
},
success: function(data, textStatus){
$(".ajax.ajaxResult").html("");
$("item",data).each(function(i, domEle){
$(".ajax.ajaxResult").append("<li>"+$(domEle).children("title").text()+"</li>");
});
},
complete: function(XMLHttpRequest, textStatus){
//HideLoading();
},
error: function(){
//h出错处理
}
});
$.ajaxSetup({
url: "/xmlhttp/",
global: false,
type: "POST"
});
$.ajax({ data: myData });
<p id="results"><b>Results: </b> </p>
<form>
<select name="single">
<option>Single</option>
<option>Single2</option>
</select>
<select name="multiple" multiple="multiple">
<option selected="selected">Multiple</option>
<option>Multiple2</option>
<option selected="selected">Multiple3</option>
</select><br/>
<input type="checkbox" name="check" value="check1"/> check1
<input type="checkbox" name="check" value="check2"
checked="checked"/> check2
<input type="radio" name="radio" value="radio1"
checked="checked"/> radio1
<input type="radio" name="radio" value="radio2"/> radio2
</form>
]]>
<script type=”text/javascript”>
jQuery.noConflict();
</script>
<script type="text/javascript">
var jQuery=$;
</script>
<!--上面q个window.js调用了jquery框架的方?->
<script type="text/javascript" type="text/javascript" src="prototype.js"></script>
<script src="js/jquery-1.2.6.pack.js"></script>
<script type=”text/javascript”>
var jQuery=$;
</script>
<script src="easy_validation/lib/prototype.js" type="text/javascript"></script>
<script src="easy_validation/lib/effects.js" type="text/javascript"></script>
<script src="easy_validation/src/validation_cn.js" type="text/javascript"></script>
<link rel="stylesheet" type="text/css" href="easy_validation/styles/style_min.css" />
<script>
jQuery(document).ready(function(){
//jQuery("#contents").load("test.jsp");
jQuery("#contents").load("test.jsp?username=BeanSoft")
});
</script>
<!-- 为form增加required-validate class,标识需要验证form -->
<form id='helloworld' action="#" class='required-validate'>
<input name="user.name" class="required min-length-6 max-length-20 validate-alphanum" value="beansoft">
*密码:
<input name="user.password" type="password" class="required min-length-6 max-length-20" value="123456" >
<input name="password1" type="password" class="required equals-user.password" value="123456" >
<input type='reset' value='Reset'/>
</form>
]]>
$("#msg")[0].innerHTML;
$("#msg").eq(0)[0].innerHTML;
$("#msg").get(0).innerHTML;
//?#8220;<b>new content</b>” 作ؓhtml串写入id为msg的元素节点内容中,面昄_体的new content
//?#8220;<b>new content</b>” 作ؓ普通文本串写入id为msg的元素节点内容中,面昄<b>new content</b>
$("#msg").height("300"); //id为msg的元素的高度设ؓ300
$("#msg").width(); //q回id为msg的元素的宽度
$("#msg").width("300"); //id为msg的元素的宽度设ؓ300
$("#msg").click(fn); //为id为msg的元素单M件添加函?/p>
min: function(a, b){return a < b?a:b; },
max: function(a, b){return a > b?a:b; }
}); //为jquery扩展了min,max两个Ҏ
所谓连写,卛_以对一个jquery对象q箋调用各种不同的方法?/p>
.mouseover(function(){alert('mouse over event')})
.each(function(i){this.style.color=['#f00','#0f0','#00f'][i]});
$("#msg").css({ color: "red", background: "blue" });//以名值对的Ş式设定样?br />
$("#msg").addClass("select"); //为元素增加名UCؓselect的class
$("#msg").removeClass("select"); //删除元素名称为select的class
$("#msg").toggleClass("select"); //如果存在Q不存在Q就删除Q添加)名称为select的class
$("#msg").click(function(){alert("good")}) //为元素添加了单击事g
$("p").click(function(i){this.style.color=['#f00','#0f0','#00f'][i]}) //Z个不同的p元素单击事g分别讑֮不同的处?/span>
$(this).addClass("over");
},
function(){
$(this).addClass("out");
});
//面加蝲完毕提示“Load Success”,不同于onload事gQonload需要页面内容加载完毕(囄{)Q而ready只要面html代码下蝲完毕卌发。与$(fn){h
$(this).addClass("selected");
},function(){
$(this).removeClass("selected");
});
//为每个p元素d单击事g
$("p").unbind(); //删除所有p元素上的所有事?br />
$("p").unbind("click") //删除所有p元素上的单击事g
var tempArr=[0,1,2];
for(var i=0;i<tempArr.length;i++){
alert("Item #"+i+": "+tempArr[i]);
}
$.each( { name: "John", lang: "JS" }, function(i, n){ alert( "Name: " + i + ", Value: " + n ); });
Name:name, Value:John
Name:lang, Value:JS
$.extend(target,prop1,propN)Q用一个或多个其他对象来扩展一个对象,q回q个被扩展的对象。这是jquery实现的承方式?br />
如:
$.extend(settings, options);
//合ƈsettings和optionsQƈ合q结果返回settings中,相当于optionsl承settingq将l承l果保存在setting中?br />
var settings = $.extend({}, defaults, options);
//合ƈdefaults和optionsQƈ合q结果返回到setting中而不覆盖default内容?br />
可以有多个参敎ͼ合ƈ多项q返回)
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):合ƈ两个数组q删除其中重复的目?br />
如:
$.merge( [0,1,2], [2,3,4] ) //q回[0,1,2,3,4]
如:
$.trim(" hello, how are you? "); //q回"hello,how are you? "
// 开始用jQuery
jQuery("div p").hide();
// 使用其他库的 $()
$("content").style.display = 'none';
//为烦引分别ؓ0Q?Q?的p元素分别讑֮不同的字体颜艌Ӏ?/p>
//实现表格的隔行换色效?/p>
//为每个p元素增加了click事gQ单L个p元素则弹出其内容
]]>
下面是个例子,用来更新一些统计信?$.post('save.cgi', {
text: 'my string',
number: 23
}, function() {
alert('Your data has been saved.');
});
$.ajax({
url: 'document.xml',
type: 'GET',
dataType: 'xml',
timeout: 1000,
error: function(){
alert('Error loading XML document');
},
success: function(xml){
// do something with xml
}
});
success: function(xml){
$(xml).find('item').each(function(){
var item_text = $(this).text();
$('<li></li>')
.html(item_text)
.appendTo('ol');
});
}
]]>$(document).ready(function() {
// do stuff when DOM is ready
});
$("a").click(function() {
alert("Hello world!");
});
jQuery中提供了两种Ҏ来选择HTML元素Q第一U是用CSS和Xpath选择器联合v来Ş成一个字W串来传送到jQuery的构造器Q如Q?("div > ul a")Q;W二U是用jQuery对象的几个methods(Ҏ)。这两种方式q可以联合v来合用?/p>
//在一个菜单应用中Q将其子菜单中的A标记加样?/span>
$(document).ready(function() {
$("#Menu ul a").hover(function(){
$(this).addClass("blue");
},function(){
$(this).removeClass("blue");
});
$(document).ready(function() {
$("#orderedlist").find("li").each(function(i) {
$(this).html( $(this).html() + " BAM! " + i );
});
});
$(document).ready(function() {
$("li").not("[ul]").css("border", "1px solid black");
});
$(document).ready(function() {
$("a[@name]").background("#eee");
});
$(document).ready(function() {
$("a[@href*=/content/gallery]").click(function() {
// do something with all links that point somewhere to /content/gallery
});
});
$(document).ready(function() {
$('#faq').find('dd').hide().end().find('dt').click(function() {
var answer = $(this).next();
if (answer.is(':visible')) {
answer.slideUp();
} else {
answer.slideDown();
}
});
});
$(document).ready(function() {
$("a").hover(function() {
$(this).parents("p").addClass("highlight");
}, function() {
$(this).parents("p").removeClass("highlight");
});
});
$(document).ready(callback)的羃写法Q?br />
$(function() {
// code to execute when the DOM is ready
});
$(function() {
$("a").click(function() {
alert("Hello world!");
});
});