第十五章 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 οnlοad=”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

 

 
  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值