第十五章 AJAX JQuery
JQuery是另外一个非常流行的JavaScript框架,相对于Dojo来说JQuery更加的轻便,JQuery代码文件的大小为20kb,但是丝毫没有影响到JQuery的强大功能,也许在了解JQuery之后你会有更深刻的体会。并且JQuery使用了插件的体系结构,开发人员可以在JQuery的基础上利用插件的机制扩展JQuery的功能。
和JQuery详细的JavaScript框架有Prototype,虽然Prototype和script.aculo.us也可以制作出强大的功能的页面。但是我更喜欢JQuery的简介方式和强大的插件群。
JQuery官方网站: http://www.jquery.com
Prototype官方网站: http://www.prototypejs.org
script.aculo.us官方网站: http://script.aculo.us
JQuery核心只有一个文件jquery-x.x.x.x.js,其中x.x.x.x表示了文件的版本,现在最新的版本为1.1.3.1。并且为了提高jquery的下载效率,官方网站提供了一个压缩版本的文件,这个文件只有20kb。
安装jqueyr只需要将jquery-x.x.x.x.js拷贝到对应web项目的javascript脚本目录即可。
<script type="text/javascript" src="path/to/jquery.js"></script>
JQuery 核心
Onload 使用
我们有些时候需要在页面初始化完成的时候调用一些JavaScript预处理操作,例如设置某些Button不可用等,这个时候我们通常有两种选择。
第一:<body onload=”someFunction();”>
第二:window.onload = someFunction;
上述代码意义相同,都会在页面初始化完成之后执行someFunction这个预先定义的JavaScript函数。但是,页面初始化完成到底是什么含义呢?页面初始化完成意味着页面全部被浏览器显示,也就是说所有的image都加载完成。有些时候这个过程非常的常,有些时候我们可以看到有些网站的button先是可用,后来等所有页面显示之后又不可用了就是这个原因。
那么我们到底在什么时候执行someFunction是比较合适的呢?我们倾向于页面的全部document内容被加载,而不是所有内容正确显示之后别调用。
以img为例说明上述的区别,例如
<img src=”http://hostname:port/webapp/xxx.jpg” />
当上述字面内容被浏览器下载完成时,我们可以说img被加载了,当http://hostname:port/webapp/xxx.jpg指向的内容被下载并且被正确显示之后,可以说img被正确显示了。
如何使用JQuery来达到页面内容别加载就执行someFunction?
$(document).ready(someFunction);
$()是什么?
$()是JQuery的核心方法,$()方法有几种不同的调用方式,但是这几种方式都有一个共通的特点,就是通过$()方法,可以将一个普通的HTML DOM对象(p, div, body, doucment等)封装成为一个特殊的,增强了JQuery功能的JQuery对象。
说道这里大家可能会知道了JQuery其实相当于一个对象,一个封装了不同HTMLDOM对象的对象。
$(string)
凭空创建一个JQuery包装起来的HTML DOM对象,例如:
$("<div><p>Hello</p></div>").appendTo("body")
上述代码建立了一个Hello段,Hello段在一个div内部,之后将这个div追加到了doby内部。
$( elems )
讲一个已经存在的HTML DOM对象包装为JQuery对象,例如:
$(document.body).css( "background", "black" );
上述代码把body的background设置为black
$( myForm.elements ).hide()
隐藏myForm中所有的对象
$( function)
$(document).ready(function)的简写,总共有三种方法让一个function在dom初始化完成之后被调用:
$(document).ready(function)
$( function)
JQuery(function)
$( expr, context )
在上下文()中查找表达式()所只是的对象,context不存在的情况下在document上下文中查找,例如:
DOM对象: <p>one</p> <div><p>two</p></div> <p>three</p>
调用: $("div > p")
结果: <p>two</p>
$("input:radio", document.forms[0])
查找第一个form中的所有redio类型的输入框。
$("div", xml.responseXML)
查找xml.responseXML指示的XML文件内容中所有的div项。
扩展JQuery的功能
可以使用$.fn.extend( prop )来扩展JQuery提供的功能,例如,JQuery并没有提供check和uncheck方法,但是我们可以通过如下的代码扩展JQquery,使JQuery增加check和uncheck功能:
jQuery.fn.extend({
check: function() {
return this.each(function() { this.checked = true; });
},
uncheck: function() {
return this.each(function() { this.checked = false; });
}
});
之后我们可以选择一个对象来使用扩展的check和uncheck方法,例如:
$("input[@type=checkbox]").check();
$("input[@type=radio]").uncheck();
解决和其他框架的冲突
$在JQuery中有着特殊的含义,但是有些时候我们的项目已经集成了其他的框架)(例如Prototype),在其他框架中$已经被使用了,那么我们怎么消除JQuery对$指定的特殊含义呢?
我们可以使用jQuery.noConflict()方法,在调用这个方法之后,$已经不在具有我们前面说的JQuery赋予的功能,所以所有的后续代码必须使用JQuery调用,例如:
jQuery.noConflict();
// 调用JQuery的方法
jQuery("div p").hide();
// 调用其他框架的$()方法
$("content").style.display = 'none';
我们也可以指定自己喜欢的名字来替换$,例如:
var j = jQuery.noConflict();
// 调用jQuery的方法
j("div p").hide();
// 调用其他框架的 $( ) 方法
$("content").style.display = 'none';
其他常用方法
each( fn )
这对数组中的每一个对象调用fn方法。例如:
HTML DOM代码:<img/><img/>
调用方法: $("img").each(function(i){
this.src = "test" + i + ".jpg";
});
结果: <img src="test0.jpg"/><img src="test1.jpg"/>
eq( pos )
定位具体的HTML DOM对象
HTML DOM代码:<p>This is just a test.</p><p>So is this</p>
调用方法: $("p").eq(1)
结果: <p>So is this</p>
get( pos )
定位具体的HTML DOM对象(脱掉了JQuery的包装,原始的DOM对象)
HTML DOM代码:<img src="test1.jpg"/> <img src="test2.jpg"/>
调用方法: $("img").get( num )
结果: <img src="test1.jpg"/>
get()
针对所有的对象,脱掉了JQuery的包装,获取原始的DOM对象
HTML DOM代码:<img src="test1.jpg"/> <img src="test2.jpg"/>
调用方法: $("img").get()
结果: <img src="test1.jpg"/><img src="test2.jpg"/>
gt( pos )
取出pos之后的所有对象
HTML DOM代码:<img src="test1.jpg"/> <img src="test2.jpg"/>
调用方法: $("img").gt(0)
结果: <img src="test1.jpg"/>
index( subject )
找到subject在数组中对应的index,不存在时返回-1
HTML DOM代码:<div id="foobar"><b></b><span id="foo"></span></div>
调用方法: $("*").index( $('#foobar')[0] )
结果: 0
Length
返回对象数组的长度。
HTML DOM代码:<img src="test1.jpg"/> <img src="test2.jpg"/>
调用方法: $("img").length
结果: 2
lt( pos )
与gt相反
HTML DOM代码:<p>This is just a test.</p><p>So is this</p>
调用方法: $("p").lt(1)
结果: <p>This is just a test.</p>
size()
与length相同
JQuery HTML DOM遍历和选择器
JQuery的功能很强大,可以包装任何一个HTML DOM元素添加强大的功能,那么如何找到需要的元素呢?这就需要JQuery Selector来帮慢,原理上讲,JQuery Selector可以超找到HTML DOM里的任何元素
JQuery Selector主要包含三个方面的实现:CSS方式,XPath方式,和JQuery自定义的方式。
为了逐个讲解这些Selector,首先给大家一些基本的例子:
隐藏所有包含链接(a)的段(p):
$("p[a]").hide();
显示一个页面的第一个段(p):
$("p:eq(0)").show();
将所有显示(visible=true)的div隐藏:
$("div:visible").hide();
所有无须列表(ul)的项目(li):
$("ul/li")
或者 $("ul > li") */
获得所有class类型为foo,并且包含链接(a)的段:
$("p.foo[a]");
获得所有字符内容包含Register的项目(li)
$("li[a:contains('Register')]");
得到name=bar的输入项目的值:
$("input[@name=bar]").val();
获得所有被选中的button:
$("input[@type=radio][@checked]")
CSS方式
JQuery的CSS方式的Selector支持CSS1-CSS3标准。
与CSS中的实现完全一致的:
*
任何的元素
E
任何类型为E的元素
E:nth-child(n)
E元素的第n个子元素
E:first-child
E的第一个子元素
E:last-child
E的最后一个元素
E:only-child
E的唯一的子元素
E:empty
E没有子元素,也不能包含text内容
E:enabled
E类型的UI元素,并且不是disabled的
E:disabled
E类型的UI元素,并且是disabled的
E:checked
E类型的UI元素(radio或者checkbox),并且是checked的
E:selected
E类型的UI元素(option),并且是选中的(虽然CSS中没有支持,JQuery支持)
E.warning
Class = warning的元素(dot(.) 表示class)
E#myid
Id=myid的元素,最多有一个元素被选中。
E:not(s)
E类型的元素,但是与简单selector s 不匹配
E F
E类型的F类型的后代元素
E > F
E类型的F类型的子元素(F在E之内)
E + F
F类型紧跟着E类型(F在E之后,并且紧挨着)
E ~ F
F类型前面连着E类型(F在E之后,不一定紧挨着)
E,F,G
E,F,G所有类型的元素
与CSS中实现稍有不同的:
E[@foo]
包含属性foo的E类型的元素
E[@foo=bar]
包含属性foo,并且属性foo的值为bar的E类型的元素
E[@foo^=bar]
包含属性foo,并且foo的值以bar开始的E类型的元素
E[@foo$=bar]
包含属性foo,并且foo的值以bar结尾的E类型的元素
E[@foo*=bar]
包含属性foo,并且foo的值包含bar的E类型的元素
E[@foo=bar][@baz=bop]
属性foo值为bar,属性baz值为bop的E类型的元素。
XPath方式
位置路径
在HTML DOM中查找:
$("/html/body//p")
$("body//p")
$("p/../div")
在当前上下文中查找:
$("p/*", this)
$("/p//a", this)
坐标位置
子孙节点有一个子孙节点:
$("//div//p")
子孙节点有一个子节点:
$("//div/p")
$("//div ~ form")
$("//div/../p")
预言
$("//input[@checked]")
$("//a[@ref='nofollow']")
$("//div[p]")
$("//div[p/a]")
[last()] or [position()=last()] becomes :last
$("p:last")
[0] or [position()=0] becomes :eq(0) or :first
$("p:first")
$("p:eq(0)")
[position() < 5] becomes :lt(5)
$("p:lt(5)")
[position() > 2] becomes :gt(2)
$("p:gt(2)")
JQuery自定义的Selector
:even
偶数节点选择
:odd
奇数节点选择
:eq(n) and :nth(n)
第n个元素
:gt(N)
排序比N大的元素
:lt(N)
排序比N小的元素
:first
与:eq(0)相同
:last
最后一个元素
:parent
包含子元素(文本内容也算)的节点
:contains('test')
包含test文本内容的节点
:visible
所有显示的元素
:hidden
所有隐藏的内容
例如:
$("p:first").css("fontWeight","bold");
$("div:hidden").show();
$("/div:contains('test')", this).hide();
JQueyy 操作HTML属性和CSS
JQUery 事件
JQuery 动画效果
JQuery Ajax
JQuery 插件
JQuery Thickbox plugin
JQuery Form Plugin
JQuery Tab Plugin
JQuery Context Menu Plugin
JQuery Short Key Plugin
JQuery Inplace Plugin
分享到:
相关推荐
第1章 Web开发的发展与趋势 第2章 JavaScript基础 ...第15章 jQuery+PHP动态网站实践 第16章 jQuery键盘操作 第17章 jQuery可视化数据显示 本资料共包含以下附件: 《jQuery开发技术详解》光盘 源文件+ppt.rar
《疯狂ajax讲义》(第三版) 李刚的疯狂系列大家应该都懂的(PDF格式,共624页)。。。。。。 因为条件限制,分成7个压缩包,需要的请下载7个压缩包后一起解压。...第十二章 Ajax实例:电子拍卖系统
《疯狂ajax讲义》(第三版) 李刚的疯狂系列大家应该都懂的(PDF格式,共624页)。。。。。。 因为条件限制,分成7个压缩包,需要的请下载7个压缩包后一起解压。...第十二章 Ajax实例:电子拍卖系统
### 第十五章:进阶话题 对jQuery深入研究,如模块化开发、jQuery源码分析等,为成为高级开发者打下基础。 通过这15天的学习,你将不仅能够熟练使用jQuery,还能理解其背后的原理,为你的Web开发生涯增添利器。无论...
《疯狂ajax讲义》(第三版) 李刚的疯狂系列大家应该都懂的(PDF格式,共624页)。。。。。。 因为条件限制,分成7个压缩包,需要的请下载7个压缩包后一起解压。...第十二章 Ajax实例:电子拍卖系统
《疯狂ajax讲义》(第三版) 李刚的疯狂系列大家应该都懂的(PDF格式,共624页)。。。。。。 因为条件限制,分成7个压缩包,需要的请下载7个压缩包后一起解压。...第十二章 Ajax实例:电子拍卖系统
《疯狂ajax讲义》(第三版) 李刚的疯狂系列大家应该都懂的(PDF格式,共624页)。。。。。。 因为条件限制,分成7个压缩包,需要的请下载7个压缩包后一起解压。...第十二章 Ajax实例:电子拍卖系统
《疯狂ajax讲义》(第三版) 李刚的疯狂系列大家应该都懂的(PDF格式,共624页)。。。。。。 因为条件限制,分成7个压缩包,需要的请下载7个压缩包后一起解压。...第十二章 Ajax实例:电子拍卖系统
《疯狂ajax讲义》(第三版) 李刚的疯狂系列大家应该都懂的(PDF格式,共624页)。。。。。。 因为条件限制,分成7个压缩包,需要的请下载7个压缩包后一起解压。...第十二章 Ajax实例:电子拍卖系统
### 第15天:实战项目与复习 1. **综合应用**:通过一个完整的项目,整合所学的jQuery知识,提升实战能力。 2. **回顾与总结**:回顾15天的学习,巩固理解,为今后的开发打下坚实基础。 在学习过程中,确保动手...
第15章可能深入讨论了一些高级Ajax主题,例如Ajax库和框架的使用,比如jQuery、Prototype等,它们简化了Ajax开发并提供了丰富的功能。这一章还可能涉及Ajax的性能优化,如缓存策略、减少HTTP请求、预加载数据等。...
第15天:项目实战 通过构建一个完整的网页应用,将所学知识融会贯通,巩固对jQuery的理解和运用。 通过这15天的学习,您将具备独立使用jQuery进行网页开发的能力,能够快速、有效地实现各种动态效果和交互功能。...
第十五天:回顾与进阶 - 知识总结:回顾15天所学,巩固理解。 - 进阶学习:推荐进一步学习jQuery的高级技巧,如委托事件、插件开发等,并关注jQuery生态的最新发展。 通过这15天的学习,你将能够熟练运用jQuery进行...
**第11天至第15天:实战应用** 1. **响应式设计**:结合jQuery实现响应式网页,响应不同设备和屏幕尺寸。 2. **网页交互**:构建动态网页,如模态对话框、滑动菜单、轮播图等常见交互组件。 3. **性能优化**:学习...
JavaScript/CSS/DOM基础 第0课 - 内容概述 - [精通JavaScript+jQuery] 第1课 - JavaScript背景知识-[精通JavaScript+jQuery] 第2课 - JavaScript基础 - [精通...第15课 - jQuery插件 - [精通JavaScript+jQuery]
第15章:实战篇 这一章以实际项目为背景,展示了Ajax在复杂Web应用中的应用。包括如何构建一个动态的表格系统,允许用户无需刷新页面即可添加、编辑和删除数据。此外,还介绍了使用Ajax实现分页功能,以及如何实现...
第6章 Ajax在jQuery中的应用/159 6.1 加载异步数据/160 6.1.1 传统的JavaScript方法/160 6.1.2 jQuery中的load()方法/162 6.1.3 jQuery中的全局函数getJSON()/164 6.1.4 jQuery中的全局函数getScript()/166 ...
第八章关注客户端验证,第九章讨论如何增强页面元素的美学和可用性,第十章则深入到jQuery的扩展性,学习和开发插件。 附录A、B、C分别提供了jQuery、JavaScript和Web开发的相关资源、开发工具推荐以及JavaScript...
### servlet与Ajax、jQuery的对比 #### 一、Servlet概览 Servlet是一种由Sun Microsystems定义的标准,用于扩展Web服务器的功能。它可以被视为服务器端的小应用程序,能够处理来自客户端的HTTP请求并返回响应。...
- **第七章和第八章**:深入探讨jQuery UI和jQuery Mobile,以及如何利用jQuery的强大扩展能力开发自定义插件。 - **后续章节**:进一步探索jQuery的各种特性和高级技术。 - **附录A**:讲解JavaScript中的闭包...