1)jQuery是什么?
本质上是一个JS的函数库,极大地简化了JS编程,从而实现比JS写的更少但做的更多的效果。
jQuery是对JS的一些封装,能用jQuery的肯定用jQuery,不能用的才有JS。
首先肯定有和JS一样的功能,即可以和JS对象相互转换,那更多的功能是什么?
A、HTML元素选取、操作和事件函数;
B、HTML DOM遍历和修改;
C、CSS操作;
D、AJAX
2)jQuery怎么用?
在使用jQuery之前需要先聊下jQuery的语法、选择器和事件:
(1)jQuery语法:
jQuery语法非常简单,就是选取HTML元素,并对选取的元素执行某些操作,即
(
s
e
l
e
c
t
o
r
)
.
a
c
t
i
o
n
(
)
,
其
中
(selector).action(),其中
(selector).action(),其中表示jQuery;selector可以是this代表当前元素,也可以是具体的元素,比如p,还可以是p.test表示class=”test”的p元素或者是#test表示id=”test”的元素;action可以是hide等方法。
需要注意的是在所有jQuery函数的外面都有一个document ready函数,即文档就绪事件,如下所示:
为什么要在jQuery代码外面弄一个文档就绪事件?因为有这个,文档才能在完全加载即就绪之后才能运行jQuery代码,从DOM角度解释就是需要等DOM加载完毕后才能对DOM进行操作,当然为了简单点,可以写成如下所示:
上面这两种写法都是jQuery的入口函数,那在此回顾下JS的入口函数:
问题来了,二者的入口函数有什么?
jQuery的入口函数是等HTML所有标签即DOM加载完毕后才执行操作;
而JS的入口函数等所有内容,包括外部图片之类的文件加载完毕后才执行操作。
所以执行JS入口函数的条件更高。
(2)jQuery选择器:
既然jQuery需要选取HTML的元素,那就要用到选择器,说到选择器肯定会想到前面CSS选择器,那jQuery选择器和CSS选择器区别在哪?CSS选择器用$(“”)包起来就成了一个jQuery选择器,和CSS选择器一样包括ID选择器、类选择器、标签选择器和层次选择器,但CSS里的伪类选择器这里称之过滤选择器(用:表示过滤)。
需要注意的是为了更好区分二者的选择器,jQuery一般使用ID选择器,CSS用类选择器。
还有就是:和[ ]这两个符号有什么区别?前者可以理解为种类,后者是属性,如下所示:
如果点击第一行,则下面第一个按钮不见第二个还在;
如果点击第二行,则下面两个按钮都不见。
注:这里的$(“:button”)就是过滤选择器,过滤选择器在表单中经常用到。
(3)jQuery事件:
上面提到的文档就绪事件是指等待HTML中所有元素即DOM加载完毕后执行jQuery代码,由此可知,事件就是当HTML中发生某些事件时所调用的方法,那具体的事件有哪些呢?最常见的是点击元素(一般是按钮,当然也可以是p这种元素即一段文字)、在元素上移动鼠标,这些属于鼠标事件,比如click(单击)、dbclick(双击)、mouseenter(当鼠标指针进入该元素时)、mouseleave(当鼠标指针离开该元素时)和hover(当鼠标指针悬停在该元素上时,即进入和离开的结合);键盘事件,比如keypress(键被按下,可以计算键被按下的次数)、keydown(键按下的过程)和keyup(键被松开的过程);表单事件,比如submit(表单提交事件,可以在该事件里用alert方法即弹窗)、change(表单字段修改事件)、focus(当元素获得焦点时发生该事件,比如在用户名后面的输入框输入值时会在后面显示一些提示语)和blur(当元素失去焦点时发生该事件,这种事件经常和focus事件配合使用);还有文档/窗口事件,比如load、resize、scroll和unload。
熟悉jQuery的语法、选择器和事件之后,就可以利用这些概念即“工具”去使用jQuery,在使用jQuery之前肯定要在HTML中引入jQuery:
两种方法,一种是CDN引用,比如从百度、新浪等国内服务器引用jQuery,如下所示:
另一种是下载jQuery并放到和编写的代码一样的目录下,然后在代码里直接行内式,即在标签中书写script子标签,通过src属性引入jQuery函数库,如下所示:
注:script标签对里为什么不加上type=”text/javascript”这个属性了?因为JS是现在所有浏览器中的默认脚本语言,所以不需要指定。
需要特别注意的是jQury版本问题,因为jQuery版本很多,而且不兼容,所以开发小组组员一定要统一。
接下来就是使用jQuery了,jQuery的使用主要从jQuery效果、HTML、遍历和ajax这四个方面展开:
(1)jQuery效果
上面jQuery语法里提到jQuery是选取HTML中的元素,然后对元素进行操作,如何选取?前面也提到了,即选择器+事件,那如何操作?这里先聊下jQuery的隐藏和显示,对应的API分别是hide()和show(),这两个方法里还可以指定两个参数,分别是speed和callback,前者表示隐藏/显示的速度,可以用slow、fast或者具体毫秒值表示;后者表示隐藏/显示完成后执行的函数名称(当然也可以只写一个),如下所示:
注:第二幅图里hide函数里第二个参数linear是一个字符串,表示过渡使用哪种缓动函数,jQuery提供的有linear和swing。
如果设置两个按钮分别表示隐藏和显示比较麻烦,那就用toggle()方法,该方法用于切换hide()和show()方法,和隐藏、显示方法一样,该方法也可以设置两个参数。
jQuery效果里除了隐藏和显示外,还有淡入淡出、滑动、动画、停止动画等,因为不是专门学前端,所以这些就不在这里展开。
(2)jQuery HTML
jQuery非常重要的一个用途是操作DOM,即操作HTML元素和属性,通俗讲就是对HTML元素的内容和属性进行增删改查,为此提供了一系列的方法,使其操作变得很容易,比如jQuery获取HTML的内容和属性的方法有用text()来设置或者返回所选元素的文本内容、html()来设置或者返回所选元素的内容(包括HTML标记)、val()来设置或者返回表单字段的值,如下所示:
上面的方法是获取元素即标签对里的内容,如果要获取开始标签里的属性,怎么获取?用attr()方法,如下所示:
上面提到的四种方法是查询元素的内容和属性,如果是要对内容和属性进行修改怎么办?可以直接在方法括号里加上要修改的内容即可,如下所示:
当然也可以加上回调函数,两个参数中i表示被选元素列表中当前元素的下标,origText表示改变前的旧值,如下所示:
同理可得,attr()也可以设置元素的属性值(可以多个)和回调函数,如下所示:
注:这里的回调函数里两个参数含义和前面的一样,这个函数作用就是在原来的网址上添加/jquery,所以结果会跳转到其他页面。
上面的方法都是在已有的元素内进行查询和修改,如果想对元素进行增怎么办?分两种情况,一种是在被选元素内部插入新的内容,就用append()或者prepend(),前者是在被选元素的尾部插入内容,后者是在开头插入内容;另一种是在被选元素的外部插入新的内容,就用after()和before(),前者是被选元素之后插入内容,后者是被选元素之前插入内容。问题是怎么这些想要插入的内容怎么创建?三种方法:text/HTML、jQuery 或者 JavaScript/DOM,如下所示:
讲完元素的增改查之后,那就要聊下如何删除元素?
一般有两种方法:remove()和empty(),前者是删除被选元素及其子元素,后者是只删除被选元素的子元素,而被选元素本身不删除。
需要注意的是remove()方法里可以添加一个参数,从而对被删元素进行过滤,这个参数可以是任何jQuery选择器的语法,比如删除class=”italic”的所有p元素:
讲完HTML里元素的增删改查,再聊下jQuery操作CSS的方法:
比如addClass()是向被选元素中添加一个或者多个类:
removeClass()是从被选元素中删除一个或者多个类:
toggleClass()是对被选元素进行添加/删除类的切换操作:
css()方法是设置或者返回被选元素的一个或多个样式属性:
jQuery除了可以对HTML中元素的内容和属性进行增删改查、CSS中类的增删和属性的查询及修改外,还可以对查询和修改元素的宽度及高度等。
(3)jQuery 遍历
这个和DOM及其CSS相关,即想要选取某个HTML元素可以根据这个元素和其他元素的关系来查找,方法有很多,比如parent()是选取被选元素的上一级父元素,parents()是选取所有的祖先元素,即包括父元素、爷元素及其以上,parentUtil()是返回介于两个给定元素之间的所有祖先元素;上面是谈上一辈的方法,那肯定有下一辈的方法,比如children()表示返回被选元素的子元素,而find()表示包括子元素及其以下的所有后代元素;除了父与子,还有同胞元素,比如next()表示返回被选元素的下一个同胞元素,即只返回一个元素,nextAll()返回所有的同胞元素,即不只是下一个元素;选择器默认选择的都是所有,如果想要选择特定的元素则需要过滤,比如first()表示返回被选元素的首个元素,即符合要求的元素可能很多,但只选取第一个,同理可得last()表示符合要求的所有元素中的最后一个,如下所示:
注:div p表示div中全部后代p,由上图可知有两个元素满足,所以用first()或者last()进行过滤。
(4)jQuery AJAX
首先明确下AJAX是什么?异步JS和xml,它是和服务器交换数据的技术,可以在不重载全部页面的情况下,实现对部分网页的更新,使用AJAX的例子有百度搜索框、高德地图等,jQuery实现AJAX的方法有很多,这里主要聊下以下三种:
第一种是load()方法,这是jQuery中简单但强大的AJAX方法,可以从服务器加载数据,并把返回的数据放入到被选元素中,如下所示:
由上图可知,load()方法里的参数一般是希望加载的URL地址和load()方法完成后执行的回调函数,其中回调函数参数中的responseTxt表示调用成功时的结果内容,statusTXT表示调用的状态,xhr表示xmlHttpRequest对象,这个对象有什么用?后面会讲。load()方法除了URL和回调函数这两个参数外,还有参数data,即向服务器发送的key/value集合,这个可选,因为默认是get,所以可以不选默认直接在地址栏拼接发送。
第二种AJAX方法是
.
g
e
t
(
)
/
.get()/
.get()/.post(),分别是使用AJAX的HTTP GET或者POST请求从服务器加载数据,二者不同之处在于作用不同:前者是从指定的资源请求数据(可能返回缓存数据),后者是向指定的资源提交要处理的数据,当然还有不同点在于传输的数据量大小不同、安全性不同、编码不同、可否缓存等,如下所示:
第三种AJAX方法是$.ajax(),这种方法用于执行异步HTTP请求,什么时候用?如果出现其他方法不能完成的请求时才用,如下所示:
上面的jQuery中的AJAX方法是简单,这是因为jQuery本身是对于JS的封装,所以底层用JS是如何实现AJAX的呢?
在聊如何JS实现AJAX之前,回顾下AJAX的名字中最后一个X,即XML的意思,但在上面的jQuery方法中好像没出现?不,出现了,上面提到了回调函数的参数里有一个是xhr,其实就是XMLHttpRequest对象,这说明底层用到这个对象,这样也才能和AJAX名字中最后一个字母对应上,所以由此可以推出JS实现AJAX的第一步是获取
XMLHttpRequest对象,是不是直接new一个对象即可?但不同浏览器new的对象不同,比如最新版本的浏览器都是XMLHttpRequest对象,但老版本的需要new其他对象,所以需要不断try-catch,第一步相对比较麻烦;第二步就是用这个对象里的open方法打开与服务器的连接,默认是get请求和异步传输;第三步是用这个对象里的send方法发送请求,如果是get请求,data可以是null,如果是post请求那就是键值对集合;第四步是注册监听,一共有五个状态,我们一般只关心最后一个状态,即服务器响应结束状态,注册监听代码如下所示: