jQuery事实上沿用了JavaScript的那一套东西,几乎所有方法都支持链式调用,也就是说方法可以一个接一个地执行。
$('p')
.addClass('new-class')
.text("I'm a paragraph!")
.appendTo('body');
要记住: 链式调用过后返回的还是jQuery对象本身。
遍历,就是从一个DOM元素移动到另一个元素的行为。
.eq()
.filter()
和.not()
.first()
和.last()
.has()
.is()
.slice()
.children()
.closest()
.find()
.next()
,.nextAll()
和.nextUntil()
.prev()
,.prevAll()
和.prevUntil()
.siblings()
.parent()
,.parents()
和.parentsUntil()
.add()
,注意在此刻该元素只存在于jQuery对象中,尚未添加到DOM树,因此还不能显示在页面上。.andSelf()
.contents()
.end()
注意:我们在Google Chrome的控制台或者是FireBug的控制台里面对DOM所做的任何修改都是临时的。这意味着当刷新原始页面时,浏览器会重置所有的变更。之所以这样是因为JavaScript是一种客户端语言,脚本修改的并非存放在服务器上的真实文件,而仅仅是浏览器对这个文件副本的解释。
但是JavaScript是可以通过AJAX技术将修改保存到服务器的,这一技术能使JavaScript与服务器端语言(如PHP)协同工作。
.append()
,在目标内容之前添加.prepend()
.appendTo()
,在目标内容之前追加.prependTo()
", {
"text":"I'm a new paragraph!",
"css":{"background":"yellow"}
})
.prependTo("body");
```
.after()
,在目标内容之前,目标元素之外添加.before()
.insertAfter()
,在目标内容之前,目标元素之外添加.insertBefore()
.wrap()
,注意,里面可加回调函数$("span").wrap(function(){
return $(this).is(".foo") ? "<strong>" : "<em>";
});
.unwrap()
.wrapAll()
会在DOM中移动元素,从而使得它们集中在一起。.wrapInner()
.remove()
和.detach()
方法用于从DOM中完全删除一个元素。两个方法都从DOM中删除选中的元素,但.detach()
方法完好地保存了被删除元素的数据,因此特别适合那些需要把删除元素挪到DOM其他位置的场合。.attr()
主要有两个功能:a.读取给定的属性;b.设置给定属性的值,这需要用属性名字作为它的第一个参数,再提供一个值作为它的第二个参数。.removeAttr()
.css()
.text()
和.html()
方法用于处理一个元素的内容,二者的不同在于.html()
能够读取或设置HTML内容,而.text()
只能读取或设置文本内容。.val()
方法用于访问和修改表单元素的内容(值)。.data()
通过使用一种安全简单的方式把与元素有关的信息储存到jQuery对象中。(支持JSON格式).addClass()
用于添加属性,.removeClass()
用于删除属性,toggleClass()
用于属性轮转,即如果目标元素没有相应的class,它会添加它,如果已经有相应的class,它会删除它。.hasClass()
;.height()
,.width()
.innerHeight()
,.innerWidth()
,.outerHeight()
和outerWidth()
.map()和.each()
.map()
和.each()
方法使得开发者能够使用回调函数对结果集内的每一个元素单独处理,这个回调函数需要两个参数,即当前元素的索引和当前元素本身。
二者的区别:.map()
方法返回的是一个包含回调函数返回值的新对象,而.each()
返回的是受回调函数影响后的原始jQuery对象。这意味着.each()
支持链式调用,而.map()
不支持。
.show()
和.hide()
.fadeIn()
和.fadeOut()
。当调用这两个函数时,.fadeIn()
把元素的透明度从0调整到1,另一个则从1调整到0.淡入和淡出轮流摇摆的函数.fadeTo()
.slideUp()
,.slideDown()
,摇摆的函数有.slideToggle()
.animate()
.delay()
,停止动画.stop()
.error()
.scroll()
方法。.ready()
是一个防止脚本执行过早从而避免异常的“保险”。这个方法会一直等到DOM准备好,可以接受处理时才触发它的处理程序。一个常见的习惯是把整个脚本做成一个回调函数传递给.ready()
函数:$(document).ready(function(){
//所有利用jQuery实现的功能都放在这里
});
此外,.ready()
方法也接受一个可选的参数,这个参数用来在此函数内作为jQuery函数的别名。这使你能够书写更安全的jQuery脚本,即使在已经使用jQuery.noConflict()
方法把$别名让给了其他框架的场合,你使用$符号的脚本也一样正常工作。
下面的代码总是可以保证你代码中的$别名能够正常工作:
jQuery.ready(function($){
//所有利用jQuery实现的功能都放在这里
$("p").fadeOut();
});
unload
事件。然而,对unload
事件的处理各个浏览器并不统一。因此,若要在生产环境使用这个事件,就一定要事先在不同的浏览器环境中对脚本进行充分测试。.bind()
绑定,.unbind()
解除绑定。可用的事件有blur
,focus
,focusin
,focusout
,load
,resize
,scroll
,unload
,click
,dblclick
,mousedown
,mouseup
,mousemove
,mouseover
,mouseout
,mouseenter
,mouseleave
,change
,select
,submit
,keydown
,keypress
,keyup
和error
。.bind()
和.unbind()
,.live()
和.die()
也分别负责为元素绑定和删除事件处理函数。一个主要的不同是,.live()
不但能绑定事件处理函数和JavaScript属性给页面上已有的元素,就连动态添加到DOM中的匹配元素也能(主动)绑定。.one()
方法的用法和.bind()
完全相同,唯一的区别在于,.one()
绑定的事件处理函数,在事件触发一次后即被自动解除绑定。.toggle()
方法,有三种用法:一是.toggle()
方法允许开发者绑定两个或多个函数给click事件,这些函数在事件发生时会交替执行,非此即彼。
$("#bar")
.toggle(function(){
console.log("Function 1");
},
function(){
console.log("Function 2");
},
function(){
console.log("Function 3");
});
接下来,用下面的代码切换段落p#bar的显示状态:
$("#bar").toggle();
二是可以用一个连续时间做它的第一个参数,它就会以动画的形式隐藏或显示元素。
$("#bar").toggle(2000);
最后,可以用一个布尔值做它的第一个参数可以控制元素的显示或隐藏。
$("#bar").toggle(true);
$("#bar").toggle(false);
.trigger()
方法用来触发事件。这个方法的第一个参数是将被触发的事件名,第二个参数是一个可选的数组,用来传递给事件处理函数。$("#bar")
.bind("click",function(){
console.log("Clicked!");
})
.trigger("click");
.trigger()
方法触发事件。可用的快捷方法有.blur()
,.focus()
,.focusin()
,.focusout()
,.load()
,.resize()
,.scroll()
,.unload()
,.click()
,.dblclick()
,.mousedown()
,.mouseup()
,.mousemove()
,.mouseover()
,.mouseout()
,.mouseenter()
,.mouseleave()
,.change()
,.select()
,.submit()
,.keydown()
,.keypress()
,.keyup()
和.error()
。
举个例子,下面的代码先绑定一个处理函数到click事件,然后触发这个事件:
$("#bar").click(function(){console.log("Clicked!"); }).click();
$.ajax()
接受一个参数:一个包含AJAX调用所需设置的对象。如果调用它却不做任何设置,这个方法会简单地载入当前页面而不做任何处理。
最常用的设置项目有以下参数可以设置:
以下是一个示例:
$.ajax({
"type":"POST",
"url":"ajax.php",
"data":"var1=val1&var2=val2",
"success":function(data){
$("#bar")
.css("background","yellow")
.html(data);
}
});
$.ajaxSetup()
用于为AJAX请求设置默认选项。举例来说,默认情况下,若全部AJAX请求都被用POST方式发到ajax.php,并且返回数据都用来填充段落#bar,则可以使用下面的代码:
$.ajaxSetup({
"type":"POST",
"url":"ajax.php",
"success":function(data){
$("#bar")
.css("background","yellow")
.html(data);
}
});
现在,发起新的AJAX请求就容易多了,只需要传递新的数据:
$.ajax({
"data":{
"newvar1":"value1",
"newvar2":"value2"
}
});
在之后的AJAX调用中,只要在调用选项中给出新的选项设置就可覆盖默认设置:
$.ajax({
"type":"GET",
"data":{
"newvar1":"value3",
"newvar2":"value4"
}
});
这些快捷方法都是$.ajax()
方法的简单封装,只不过有几个请求选项被设置成了固定值而已。
使用这些方法会有轻微的性能损失,因为本质上这些方法只是被设置好了参数,然后再由它调用$.ajax()。尽管如此,使用这些快捷方法带来的便利确实能够加快脚本的开发。
处理标准的GET和POST请求,用$.get()
和$.post()
方法最方便。两个方法都支持4个参数:请求URL,可选的参数(发给远程脚本的),可选的回调函数(当请求成功完成后执行)和一个可选的dataType设置。
当需要获取JSON数据时,使用$.getJSON()格外方便。它需要的参数有请求URL,可选的数据和可选的回调函数。
要演示这个方法的使用,我们需要创建一个新的测试文件命名为json.php,然后插入以下数据:
{"var1":"value1","var2":"value2"}
然后通过jQuery获取:
$.getJSON("json.php",
function(data){
$("#bar")
.css("background","yellow")
.html(data.var1+", "+data.var2);
});
$.getScript()
方法用于加载外部脚本。它的第一个参数是请求URL,还有一个可选的回调函数(通常并不需要,因为脚本在加载完成后会自动执行)。新建一个测试文件script.php,然后添加如下内容:
alert("This script was loaded by AJAX!");
然后执行:
$.getScript("script.php");
这个函数支持三个同样的参数:目标URL,可选的数据和可选的回调函数(在当前元素的内容被替换以后执行)。