第十五章 AJAX JQuery

第十五章 AJAX JQuery

JQuery是另外一个非常流行的JavaScript框架,相对于Dojo来说JQuery更加的轻便,JQuery代码文件的大小为20kb,但是丝毫没有影响到JQuery的强大功能,也许在了解JQuery之后你会有更深刻的体会。并且JQuery使用了插件的体系结构,开发人员可以在JQuery的基础上利用插件的机制扩展JQuery的功能。

JQuery详细的JavaScript框架有Prototype,虽然Prototypescript.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" );

上述代码把bodybackground设置为black

$( myForm.elements ).hide()

隐藏myForm中所有的对象

$( function)

$(document).ready(function)的简写,总共有三种方法让一个functiondom初始化完成之后被调用:

$(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并没有提供checkuncheck方法,但是我们可以通过如下的代码扩展JQquery,使JQuery增加checkuncheck功能:

jQuery.fn.extend({

check: function() {

return this.each(function() { this.checked = true; });

},

uncheck: function() {

return this.each(function() { this.checked = false; });

}

});

之后我们可以选择一个对象来使用扩展的checkuncheck方法,例如:

$("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方式

JQueryCSS方式的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类型的子元素(FE之内)

E + F

F类型紧跟着E类型(FE之后,并且紧挨着)

E ~ F

F类型前面连着E类型(FE之后,不一定紧挨着)

E,F,G

EFG所有类型的元素

CSS中实现稍有不同的:

E[@foo]

包含属性fooE类型的元素

E[@foo=bar]

包含属性foo,并且属性foo的值为barE类型的元素

E[@foo^=bar]

包含属性foo,并且foo的值以bar开始的E类型的元素

E[@foo$=bar]

包含属性foo,并且foo的值以bar结尾的E类型的元素

E[@foo*=bar]

包含属性foo,并且foo的值包含barE类型的元素

E[@foo=bar][@baz=bop]

属性foo值为bar,属性baz值为bopE类型的元素。

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

你可能感兴趣的:(JavaScript,jquery,框架,Ajax,css)