林炳文Evankaka原创作品。转载请注明出处http://blog.csdn.net/evankaka
jQuery,顾名思义,也就是JavaScript和查询(Query),即是辅助JavaScript开发的库。jQuery是免费、开源的,使用MIT许可协议。jQuery的语法设计可以使开发者更加便捷,例如操作文档对象、选择DOM元素、制作动画效果、事件处理、使用Ajax以及其他功能。除此以外,jQuery提供API让开发者编写插件。其模块化的使用方式使开发者可以很轻松的开发出功能强大的静态或动态网页。
jQuery 语法是为 HTML 元素的选取编制的,可以对元素执行某些操作。
基础语法是:$(selector).action()
• 美元符号定义 jQuery
• 选择符(selector)“查询”和“查找” HTML 元素
• jQuery 的 action() 执行对元素的操作
示例
[html] view plain copy
- $(this).hide() - 隐藏当前元素
- $("p").hide() - 隐藏所有段落
- $("p.test").hide() - 隐藏所有 class="test" 的段落
- $("#test").hide() - 隐藏所有 id="test" 的元素
1、关于页面元素的引用
通过jquery的$()引用元素包括通过id、class、元素名以及元素的层级关系及dom或者xpath条件等方法,且返回的对象为jquery对象(集合对象),不能直接调用dom定义的方法。
jQuery的基本设计和主要用法,就是"选择某个网页元素,然后对其进行某种操作"。这是它区别于其他函数库的根本特点。使用jQuery的第一步,往往就是将一个选择表达式,放进构造函数jQuery()(简写为$),然后得到被选中的元素。
选择表达式可以是CSS选择器:
[html] view plain copy
- $(document) //选择整个文档对象
- $(‘#myId‘) //选择ID为myId的网页元素
- $(‘div.myClass‘) // 选择class为myClass的div元素
- $(‘input[name=first]‘) // 选择name属性等于first的input元素
- 也可以是jQuery特有的表达式:
- $(‘a:first‘) //选择网页中第一个a元素
- $(‘tr:odd‘) //选择表格的奇数行
- $(‘#myForm :input‘) // 选择表单中的input元素
- $(‘div:visible‘) //选择可见的div元素
- $(‘div:gt(2)‘) // 选择所有的div元素,除了前三个
- $(‘div:animated‘) // 选择当前处于动画状态的div元素
2、jQuery对象与dom对象的转换
只有jquery对象才能使用jquery定义的方法。注意dom对象和jquery对象是有区别的,调用方法时要注意操作的是dom对象还是jquery对象。普通的dom对象一般可以通过$()转换成jquery对象。如:$(document.getElementById(”msg”))则为jquery对象,可以使用jquery的方法。由于jquery对象本身是一个集合。所以如果jquery对象要转换为dom对象则必须取出其中的某一项,一般可通过索引取出。如:$(”#msg”)[0],$(”div”).eq(1)[0],$(”div”).get()[1],$(”td”)[5]这些都是dom对象,可以使用dom中的方法,但不能再使用Jquery的方法。
以下几种写法都是正确的:
[html] view plain copy
- $(”#msg”).html();
- $(”#msg”)[0].innerHTML;
- $(”#msg”).eq(0)[0].innerHTML;
- $(”#msg”).get(0).innerHTML;
3、如何获取jQuery集合的某一项
对于获取的元素集合,获取其中的某一项(通过索引指定)可以使用eq或get(n)方法或者索引号获取,要注意,eq返回的是jquery对象,而get(n)和索引返回的是dom元素对象。对于jquery对象只能使用jquery的方法,而dom对象只能使用dom的方法,如要获取第三个<div>元素的内容。有如下两种方法:
[html] view plain copy
- $(”div”).eq(2).html();//调用jquery对象的方法
- $(”div”).get(2).innerHTML;//调用dom的方法属性
4、同一函数实现set和get
[html] view plain copy
- $(”#msg”).html();//返回id为msg的元素节点的html内容。
- $(”#msg”).html(”<b>new content</b>”);
- //将“<b>new content</b>” 作为html串写入id为msg的元素节点内容中,页面显示粗体的new content
- $(”#msg”).text();//返回id为msg的元素节点的文本内容。
- $(”#msg”).text(”<b>new content</b>”);
- //将“<b>new content</b>” 作为普通文本串写入id为msg的元素节点内容中,页面显示<b>new content</b>
- $(”#msg”).height();//返回id为msg的元素的高度
- $(”#msg”).height(”300″);//将id为msg的元素的高度设为300
- $(”#msg”).width();//返回id为msg的元素的宽度
- $(”#msg”).width(”300″);//将id为msg的元素的宽度设为300
- $(”input”).val(”);//返回表单输入框的value值
- $(”input”).val(”test”);//将表单输入框的value值设为test
- $(”#msg”).click();//触发id为msg的元素的单击事件
- $(”#msg”).click(fn);//为id为msg的元素单击事件添加函数
同样blur,focus,select,submit事件都可以有着两种调用方法。
5、改变结果集
如果选中多个元素,jQuery提供过滤器,可以缩小结果集:
[html] view plain copy
- $(‘div‘).has(‘p‘); // 选择包含p元素的div元素
- $(‘div‘).not(‘.myClass‘); //选择class不等于myClass的div元素
- $(‘div‘).filter(‘.myClass‘); //选择class等于myClass的div元素
- $(‘div‘).first(); //选择第1个div元素
- $(‘div‘).eq(5); //选择第6个div元素
有时候,我们需要从结果集出发,移动到附近的相关元素,jQuery也提供了在DOM树上的移动方法:
[html] view plain copy
- $(‘div‘).next(‘p‘); //选择div元素后面的第一个p元素
- $(‘div‘).parent(); //选择div元素的父元素
- $(‘div‘).closest(‘form‘); //选择离div最近的那个form父元素
- $(‘div‘).children(); //选择div的所有子元素
- $(‘div‘).siblings(); //选择div的同级元素
6、操作元素的样式
[html] view plain copy
- $(”#msg”).css(”background”);//返回元素的背景颜色
- $(”#msg”).css(”background”,”#ccc”)//设定元素背景为灰色
- $(”#msg”).height(300); $(”#msg”).width(”200″);//设定宽高
- $(”#msg”).css({ color: “red”, background: “blue” });//以名值对的形式设定样式
- $(”#msg”).addClass(”select”);//为元素增加名称为select的class
- $(”#msg”).removeClass(”select”);//删除元素名称为select的class
- $(”#msg”).toggleClass(”select”);//如果存在(不存在)就删除(添加)名称为select的class
7、链式操作
选中网页元素以后,就可以对它进行某种操作。所谓连写,即可以对一个jquery对象连续调用各种不同的方法。
jQuery允许将所有操作连接在一起,以链条的形式写出来,比如:
[html] view plain copy
- $(‘div‘).find(‘h3‘).eq(2).html(‘Hello‘);
分解开来,就是下面这样:
[html] view plain copy
- $(‘div‘) //找到div元素
- .find(‘h3‘) //选择其中的h3元素
- .eq(2) //选择第3个h3元素
- .html(‘Hello‘); //将它的内容改为Hello
这是jQuery最令人称道、最方便的特点。它的原理在于每一步的jQuery操作,返回的都是一个jQuery对象,所以不同操作可以连在一起。
jQuery还提供了.end()方法,使得结果集可以后退一步:
[html] view plain copy
- $(‘div‘)
- .find(‘h3‘)
- .eq(2)
- .html(‘Hello‘)
- .end() //退回到选中所有的h3元素的那一步
- .eq(0) //选中第一个h3元素
- .html(‘World‘); //将它的内容改为World
包括方法也可以连写:
[html] view plain copy
- $(”p”).click(function(){alert($(this).html())})
- .mouseover(function(){alert(’mouse over event’)})
- .each(function(i){this.style.color=[‘#f00‘,‘#0f0‘,‘#00f‘][ i ]});
8、集合处理操作
对于jquery返回的集合内容无需我们自己循环遍历并对每个对象分别做处理,jquery已经为我们提供的很方便的方法进行集合的处理。
包括两种形式:
[html] view plain copy
- $(”p”).each(function(i){this.style.color=[‘#f00‘,‘#0f0‘,‘#00f‘][ i ]})
- //为索引分别为0,1,2的p元素分别设定不同的字体颜色。
- $(”tr”).each(function(i){this.style.backgroundColor=[‘#ccc‘,‘#fff‘][i%2]})
- //实现表格的隔行换色效果
- $(”p”).click(function(){alert($(this).html())})
- //为每个p元素增加了click事件,单击某个p元素则弹出其内容
9、元素的操作:移动
如果要移动选中的元素,有两种方法:一种是直接移动该元素,另一种是移动其他元素,使得目标元素达到我们想要的位置。
假定我们选中了一个div元素,需要把它移动到p元素后面。
第一种方法是使用.insertAfter(),把div元素移动p元素后面:
[html] view plain copy
- $(‘div‘).insertAfter(‘p‘);
第二种方法是使用.after(),把p元素加到div元素前面:
[html] view plain copy
- $(‘p‘).after(‘div‘);
表面上看,这两种方法的效果是一样的,唯一的不同似乎只是操作视角的不同。但是实际上,它们有一个重大差别,那就是返回的元素不一样。第一种方法返回div元素,第二种方法返回p元素。你可以根据需要,选择到底使用哪一种方法。
使用这种模式的操作方法,一共有四对:
[html] view plain copy
- .insertAfter()和.after():在现存元素的外部,从后面插入元素
- .insertBefore()和.before():在现存元素的外部,从前面插入元素
- .appendTo()和.append():在现存元素的内部,从后面插入元素
- .prependTo()和.prepend():在现存元素的内部,从前面插入元素
10、元素的操作:复制、删除和创建
复制元素使用.clone()。
删除元素使用.remove()和.detach()。两者的区别在于,前者不保留被删除元素的事件,后者保留,有利于重新插入文档时使用。
清空元素内容(但是不删除该元素)使用.empty()。
创建新元素的方法非常简单,只要把新元素直接传入jQuery的构造函数就行了:
[html] view plain copy
- $(‘<p>Hello</p>‘);
- $(‘<li class="new">new list item</li>‘);
- $(‘ul‘).append(‘<li>list item</li>‘);
11、工具方法
除了对选中的元素进行操作以外,jQuery还提供一些工具方法(utility),不必选中元素,就可以直接使用。
如果你懂得Javascript语言的继承原理,那么就能理解工具方法的实质。它是定义在jQuery构造函数上的方法,即jQuery.method(),所以可以直接使用。而那些操作元素的方法,是定义在构造函数的prototype对象上的方法,即jQuery.prototype.method(),所以必须生成实例(即选中元素)后使用。如果不理解这种区别,问题也不大,只要把工具方法理解成,是像javascript原生函数那样,可以直接使用的方法就行了。
常用的工具方法有以下几种:
[html] view plain copy
- $.trim() 去除字符串两端的空格。
- $.each() 遍历一个数组或对象。
- $.inArray() 返回一个值在数组中的索引位置。如果该值不在数组中,则返回-1。
- $.grep() 返回数组中符合某种标准的元素。
- $.extend() 将多个对象,合并到第一个对象。
- $.makeArray() 将对象转化为数组。
- $.type() 判断对象的类别(函数对象、日期对象、数组对象、正则对象等等)。
- $.isArray() 判断某个参数是否为数组。
- $.isEmptyObject() 判断某个对象是否为空(不含有任何属性)。
- $.isFunction() 判断某个参数是否为函数。
- $.isPlainObject() 判断某个参数是否为用"{}"或"new Object"建立的对象。
- $.support() 判断浏览器是否支持某个特性。
12、事件操作
jQuery已经为我们提供了各种事件处理方法,我们无需在html元素上直接写事件,而可以直接为通过jquery获取的对象添加事件。
[html] view plain copy
- $(”#msg”).click(function(){alert(”good”)})//为元素添加了单击事件
- $(”p”).click(function(i){this.style.color=[‘#f00‘,‘#0f0‘,‘#00f‘][ i ]})
//为三个不同的p元素单击事件分别设定不同的处理
jQuery中几个自定义的事件:
(1)hover(fn1,fn2):一个模仿悬停事件(鼠标移动到一个对象上面及移出这个对象)的方法。当鼠标移动到一个匹配的元素上面时,会触发指定的第一个函数。当鼠标移出这个元素时,会触发指定的第二个函数。
//当鼠标放在表格的某行上时将class置为over,离开时置为out。
[html] view plain copy
- $(”tr”).hover(function(){
- $(this).addClass(”over”);
- },
- function(){
- $(this).addClass(”out”);
- });
(2)ready(fn):当DOM载入就绪可以查询及操纵时绑定一个要执行的函数。
[html] view plain copy
- $(document).ready(function(){alert(”Load Success”)})
//页面加载完毕提示“Load Success”,相当于onload事件。与$(fn)等价
(3)toggle(evenFn,oddFn): 每次点击时切换要调用的函数。如果点击了一个匹配的元素,则触发指定的第一个函数,当再次点击同一元素时,则触发指定的第二个函数。随后的每次点击都重复对这两个函数的轮番调用。
//每次点击时轮换添加和删除名为selected的class。
[html] view plain copy
- $(”p”).toggle(function(){
- $(this).addClass(”selected”);
- },function(){
- $(this).removeClass(”selected”);
- });
(4)trigger(eventtype): 在每一个匹配的元素上触发某类事件。
例如:
[html] view plain copy
- $(”p”).trigger(”click”);//触发所有p元素的click事件
(5)bind(eventtype,fn),unbind(eventtype): 事件的绑定与反绑定
从每一个匹配的元素中(添加)删除绑定的事件。例如:
[html] view plain copy
- $(”p”).bind(”click”,function(){alert($(this).text());});//为每个p元素添加单击事件
- $(”p”).unbind();//删除所有p元素上的所有事件
- $(”p”).unbind(”click”)//删除所有p元素上的单击事件
当然,点击事件也可以这么写:
[html] view plain copy
- $(‘p‘).click(function(){
- alert(‘Hello‘);
- });
使用.bind()可以更灵活地控制事件,比如为多个事件绑定同一个函数:
[html] view plain copy
- $(‘input‘).bind(
- ‘click change‘, //同时绑定click和change事件
- function() {
- alert(‘Hello‘);
- }
- );
有时,你只想让事件运行一次,这时可以使用.one()方法。
[html] view plain copy
- $("p").one("click", function() {
- alert("Hello"); //只运行一次,以后的点击不会运行
- });
所有的事件处理函数,都可以接受一个事件对象(event object)作为参数,比如下面例子中的e:
[html] view plain copy
- $("p").click(function(e) {
- alert(e.type); // "click"
- });
这个事件对象有一些很有用的属性和方法:
[html] view plain copy
- event.pageX 事件发生时,鼠标距离网页左上角的水平距离
- event.pageY 事件发生时,鼠标距离网页左上角的垂直距离
- event.type 事件的类型(比如click)
- event.which 按下了哪一个键
- event.data 在事件对象上绑定数据,然后传入事件处理函数
- event.target 事件针对的网页元素
- event.preventDefault() 阻止事件的默认行为(比如点击链接,会自动打开新页面)
- event.stopPropagation() 停止事件向上层元素冒泡
在事件处理函数中,可以用this关键字,返回事件针对的DOM元素:
[html] view plain copy
- $(‘a‘).click(function() {
- if ($(this).attr(‘href‘).match(‘evil‘)) { //如果确认为有害链接
- e.preventDefault(); //阻止打开
- $(this).addClass(‘evil‘); //加上表示有害的class
- }
- });
附件
jquery事件
方法 |
描述 |
bind() |
向匹配元素附加一个或更多事件处理器 |
blur() |
触发、或将函数绑定到指定元素的 blur 事件 |
change() |
触发、或将函数绑定到指定元素的 change 事件 |
click() |
触发、或将函数绑定到指定元素的 click 事件 |
dblclick() |
触发、或将函数绑定到指定元素的 double click 事件 |
delegate() |
向匹配元素的当前或未来的子元素附加一个或多个事件处理器 |
die() |
移除所有通过 live() 函数添加的事件处理程序。 |
error() |
触发、或将函数绑定到指定元素的 error 事件 |
event.isDefaultPrevented() |
返回 event 对象上是否调用了 event.preventDefault()。 |
event.pageX |
相对于文档左边缘的鼠标位置。 |
event.pageY |
相对于文档上边缘的鼠标位置。 |
event.preventDefault() |
阻止事件的默认动作。 |
event.result |
包含由被指定事件触发的事件处理器返回的最后一个值。 |
event.target |
触发事件的 DOM 元素。 |
event.timeStamp |
该属性返回从 1970 年 1 月 1 日到事件发生时的毫秒数。 |
event.type |
描述事件的类型。 |
event.which |
指示按了哪个键或按钮。 |
focus() |
触发、或将函数绑定到指定元素的 focus 事件 |
keydown() |
触发、或将函数绑定到指定元素的 key down 事件 |
keypress() |
触发、或将函数绑定到指定元素的 key press 事件 |
keyup() |
触发、或将函数绑定到指定元素的 key up 事件 |
live() |
触发、或将函数绑定到指定元素的 load 事件 |
load() |
触发、或将函数绑定到指定元素的 load 事件 |
mousedown() |
触发、或将函数绑定到指定元素的 mouse down 事件 |
mouseenter() |
触发、或将函数绑定到指定元素的 mouse enter 事件 |
mouseleave() |
触发、或将函数绑定到指定元素的 mouse leave 事件 |
mousemove() |
触发、或将函数绑定到指定元素的 mouse move 事件 |
mouseout() |
触发、或将函数绑定到指定元素的 mouse out 事件 |
mouseover() |
触发、或将函数绑定到指定元素的 mouse over 事件 |
mouseup() |
触发、或将函数绑定到指定元素的 mouse up 事件 |
one() |
向匹配元素添加事件处理器。每个元素只能触发一次该处理器。 |
ready() |
文档就绪事件(当 HTML 文档就绪可用时) |
resize() |
触发、或将函数绑定到指定元素的 resize 事件 |
scroll() |
触发、或将函数绑定到指定元素的 scroll 事件 |
select() |
触发、或将函数绑定到指定元素的 select 事件 |
submit() |
触发、或将函数绑定到指定元素的 submit 事件 |
toggle() |
绑定两个或多个事件处理器函数,当发生轮流的 click 事件时执行。 |
trigger() |
所有匹配元素的指定事件 |
triggerHandler() |
第一个被匹配元素的指定事件 |
unbind() |
从匹配元素移除一个被添加的事件处理器 |
undelegate() |
从匹配元素移除一个被添加的事件处理器,现在或将来 |
unload() |
触发、或将函数绑定到指定元素的 unload 事件 |
jQuery 效果函数
方法 |
描述 |
animate() |
对被选元素应用“自定义”的动画 |
clearQueue() |
对被选元素移除所有排队的函数(仍未运行的) |
delay() |
对被选元素的所有排队函数(仍未运行)设置延迟 |
dequeue() |
运行被选元素的下一个排队函数 |
fadeIn() |
淡入被选元素至完全不透明 |
fadeOut() |
淡出被选元素至完全不透明 |
fadeTo() |
把被选元素减弱至给定的不透明度 |
hide() |
隐藏被选的元素 |
queue() |
显示被选元素的排队函数 |
show() |
显示被选的元素 |
slideDown() |
通过调整高度来滑动显示被选元素 |
slideToggle() |
对被选元素进行滑动隐藏和滑动显示的切换 |
slideUp() |
通过调整高度来滑动隐藏被选元素 |
stop() |
停止在被选元素上运行动画 |
toggle() |
对被选元素进行隐藏和显示的切换 |
@ jQuery文档操作方法
这些方法对于 XML 文档和 HTML 文档均是适用的,除了:html()。
方法 |
描述 |
addClass() |
向匹配的元素添加指定的类名。 |
after() |
在匹配的元素之后插入内容。 |
append() |
向匹配的元素内部追加内容。 |
appendTo() |
向匹配的元素内部追加内容。 |
attr() |
设置或返回匹配元素的属性和值。 |
before() |
在每个匹配的元素之前插入内容。 |
clone() |
创建匹配元素集合的副本。 |
detach() |
从 DOM 中移除匹配元素集合。 |
empty() |
删除匹配的元素集合中所有的子节点。 |
hasClass() |
检查匹配的元素是否拥有指定的类。 |
html() |
设置或返回匹配的元素集合中的 HTML 内容。 |
insertAfter() |
把匹配的元素插入到另一个指定的元素集合的后面。 |
insertBefore() |
把匹配的元素插入到另一个指定的元素集合的前面。 |
prepend() |
向每个匹配的元素内部前置内容。 |
prependTo() |
向每个匹配的元素内部前置内容。 |
remove() |
移除所有匹配的元素。 |
removeAttr() |
从所有匹配的元素中移除指定的属性。 |
removeClass() |
从所有匹配的元素中删除全部或者指定的类。 |
replaceAll() |
用匹配的元素替换所有匹配到的元素。 |
replaceWith() |
用新内容替换匹配的元素。 |
text() |
设置或返回匹配元素的内容。 |
toggleClass() |
从匹配的元素中添加或删除一个类。 |
unwrap() |
移除并替换指定元素的父元素。 |
val() |
设置或返回匹配元素的值。 |
wrap() |
把匹配的元素用指定的内容或元素包裹起来。 |
wrapAll() |
把所有匹配的元素用指定的内容或元素包裹起来。 |
wrapinner() |
将每一个匹配的元素的子内容用指定的内容或元素包裹起来。 |
@ jQuery 属性操作方法
下面列出的这些方法获得或设置元素的 DOM 属性。
这些方法对于 XML 文档和 HTML 文档均是适用的,除了:html()。
方法 |
描述 |
addClass() |
向匹配的元素添加指定的类名。 |
attr() |
设置或返回匹配元素的属性和值。 |
hasClass() |
检查匹配的元素是否拥有指定的类。 |
html() |
设置或返回匹配的元素集合中的 HTML 内容。 |
removeAttr() |
从所有匹配的元素中移除指定的属性。 |
removeClass() |
从所有匹配的元素中删除全部或者指定的类。 |
toggleClass() |
从匹配的元素中添加或删除一个类。 |
val() |
设置或返回匹配元素的值。 |
@ jQuery CSS 操作函数
下面列出的这些方法设置或返回元素的 CSS 相关属性。
CSS 属性 |
描述 |
css() |
设置或返回匹配元素的样式属性。 |
height() |
设置或返回匹配元素的高度。 |
offset() |
返回第一个匹配元素相对于文档的位置。 |
offsetParent() |
返回最近的定位祖先元素。 |
position() |
返回第一个匹配元素相对于父元素的位置。 |
scrollLeft() |
设置或返回匹配元素相对滚动条顶部的偏移。 |
scrollTop() |
设置或返回匹配元素相对滚动条左侧的偏移。 |
width() |
设置或返回匹配元素的宽度。 |