JavaScript笔记二:jQuery学习笔记

 

JavaScript笔记二:jQuery学习笔记

 

(20150115注:部分方法的执行结果跟jquery版本有关,

例如.attr("checked")的值可能是“checked”,也可能是true

请注意)

 

(不完整,不准确,待修改,请以官方文档为准)

see

http://docs.jquery.com/Main_Page

http://api.jquery.com/

http://docs.jquery.com/Alternative_Resources

http://semooh.jp/

http://shawphy.github.com/jquery-api/

 

* 核心(http://api.jquery.com/category/core/)

* jQuery函数和$(...)

$("input:radio", document.form[0]) 

$是jQuery的简写,第一参数是选择器(类似CSS语法),第二参数是检索范围的文档对象(如果是Ajax则为xml.responseXML),缺省为当前HTML的DOM元素。

(补注:)$("span", this).html("(ID = '<b>" + this.id + "</b>')");

(补注:见attr(key,fn))用于$().attr(,).each()闭包内,this表示attr返回标签的当前遍历的标签的范围(这里是<div></div>)

$("<div><p>Hello</p></div>") 

根据HTML字符串创建DOM以对其进行后续操作(input节点可能有限制),注意斜杠要转义。空元素$("<span/>")在jQuery 1.3后写成$(document.createElement("span"))。第二参数可以传所属文档对象。

$(document.body) 

把一个或多个DOM元素转换为jQuery对象(但不能接受XML文档和Window对象)

$(function(){}) 

$(document).ready()的简写(可以写成jQuery(function($) {})保护$变量),在DOM加载时执行参数中的闭包

* jQuery对象操作和类似数组的操作

(http://api.jquery.com/category/miscellaneous/dom-element-methods/)

(http://api.jquery.com/category/internals/)

(http://api.jquery.com/category/properties/)

$("li").each(function() {$(this)}) 或 $("div").each(function (index, domEle) {$(this)}) 

循环遍历集合。闭包返回false结束循环(相当于break),返回true继续循环(相当于continue)。$(this)相当于闭包第二参数domEle,即当前遍历的DOM元素。

$("div").size()

集合持有的对象个数。相当于length属性

$("div").length

集合持有的对象个数。相当于size()

$("ul").selector

jQuery 1.3以后,获得选择器字符串

$("ul").context  $("ul", document.body).context.nodeName

jQuery 1.3以后,获取jQuery对象上的DOM对象,主要用于插件。

$("p").eq(1)

取出集合中索引为n的元素(索引从0开始)

$("div").get()

转换为DOM元素的数组类型,以方便遍历或用.reverse()翻转数组。

$(this).get(0)

取出指定索引的DOM元素。$(this).get(0)相当于$(this)[0]

$("div").index(this)

查询指定DOM元素的索引号或是否存在,不存在则返回-1.

$("div").toArray().reverse()

获取所有选中的jQuery对象的DOM对象数组(每个数组元素可以读取.innerHTML域)。

* 插件

jQuery.fn.extend({ xxx:function() {return this.XXX()} });$("input[@type=xxx]");

插件扩展,通常用于选择器内的条件表达式

jQuery.extend({ xxx:function(a, b) {}});jQuery.xxx(a, b);

插件扩展,加入到jQuery的名字空间内。

* 消除命名空间的冲突(http://api.jquery.com/category/miscellaneous/setup-methods/)

jQuery.noConflict();jQuery("div p").hide();$("content")或var j=jQuery.noConflict();j("div p").hide();$("content")

恢复$原有的定义或内容。后面的jQuery代码,要么把$改为jQuery,要么用(function($) {...})()括起原来使用$的jQuery代码,要么用其返回值作为名字空间。

var dom = {};dom.query = jQuery.noConflict(true);dom.query("div p").hide();

恢复$和jQuery原有定义或内容(参数为true表示extreme模式),后面的jQuery代码改用其返回值作为名字空间。

* 新增

$.holdReady(true);$.getScript("myplugin.js", function() {$.holdReady(false);});

延迟ready事件,直至指定的插件加载完毕。

var sub$ = jQuery.sub();

复制一个新的jQuery即$对象,对这个新的$的属性或方法的修改或添加不影响原来的$。

$.when( $.ajax("test.aspx") ).then(function(ajaxArgs){ alert(ajaxArgs[1]);});

异步执行回调。

$.when($.ajax("/page1.php"), $.ajax("/page2.php")).then(myFunc, myFailure);

执行一个或多个事件(如ajax),根据结果(成功和失败)执行前一个回调或后一个回调。(可以用done代替then)

$.when( { testing: 123 } ).done(function(x){ alert(x.testing); });

非异步执行回调(传给闭包的参数就是$.when的实参)。

* 选择器(使用CSS风格的字符串进行筛选,并转为jQuery对象)(http://api.jquery.com/category/selectors/)

* 基本和复合选择器(http://api.jquery.com/category/selectors/basic-css-selectors/)

$("#myID\\.entry\\[1\\]") 

id等于特定值,反斜杠需要转义

$("div") 

标签等于特定值

$(".myClass") 

class等于特定值

$("*") 

当前集合中的全部节点

$("div,span,p.myClass") 

多个选择器的并集

* 与前一个选择器有层次或平行关系的选择器(http://api.jquery.com/category/selectors/hierarchy-selectors/)

$("form input") 

某个选择器下的符合特定选择器的后代集合

$("#main > *") 

某个选择器下的符合特定选择器的子元素集合

$("label + input") 

某个选择器后符合特定选择器的紧跟的同辈元素

$("#prev ~ div") 

某个选择器后符合特定选择器的所有同辈元素

* 基本过滤器,对选择器的再选择子集,根据索引、反选、特性(http://api.jquery.com/category/selectors/basic-filter-selectors/)

$("li:first") 

选择器选中的第一个

$("li:last") 

选择器选中的最后一个

$("input:not(:checked)") 

括号内选择器选中的被排除

$("li:even") 

选择器选中的索引(总索引,从0开始)为偶数的子集

$("li:odd") 

选择器选中的索引(总索引,从0开始)为奇数的子集

$("td:eq(2)") 

选择器选中的索引(从0开始)为特定值的节点

$("td:gt(4)") 

选择器选中的索引(从0开始)大于特定值的子集

$("td:lt(4)") 

选择器选中的索引(从0开始)小于特定值的子集

$(":header") 

选中所有h1,h2,h3标签

$("div:animated") 

选择器选中的正在执行动画的子集

el.is(":focus")

判断当前是否是焦点

* 内容过滤器,对选择器的再选择子集,根据节点中的内容(http://api.jquery.com/category/selectors/content-filter-selector/)

$("div:contains('John')") 

选择器选中的内容包含特定值的子集

$("td:empty") 

选择器选中的空标签子集

$("div:has(strong)") 

选择器选中的,使括号内选择器结果存在的子集

$("td:parent") 

选择器选中的父节点,包括文本节点

* 显示过滤器(http://api.jquery.com/category/selectors/visibility-filter-selectors/)

$("div:hidden") 

最初没有显示的元素(style为display:none;的div或type为hidden的input)

$("div:visible") 

显示的元素

* 属性过滤(http://api.jquery.com/category/selectors/attribute-selectors/)

$("div[id]") 

存在属性

$("input[name='newsletter']") 

属性等于特定值

$("input[name!='newsletter']") 

属性不存在或不等于特定值

$("input[name^='news']") 

属性等于特定值开头的值

$("input[name$='letter']") 

属性等于特定值结尾的值

$("input[name*='man']") 

属性包含特定值

$("input[id][name$='man']")  

多个属性过滤

$('a[hreflang|="en"]')

属性等于特定值,或以特定值为前缀后跟着减号'-'(例如"en-xxx")

$('input[name~="man"]')

属性包含特定值的单词(特定值的前后是空白符或字符串的头尾)

* 特定于父节点的子要素索引过滤器(http://api.jquery.com/category/selectors/child-filter-selectors/)

$("ul li:nth-child(2)") 

集合中特定于父节点的索引为指定值或even/odd/关于n的表达式(不同于:even和:odd,它的索引值特定于父节点) 

$("div span:first-child") 

集合中特定于父节点的第一个元素

$("div span:last-child") 

集合中特定于父节点的最后的元素

$("div button:only-child") 

集合中特定于父节点的只有一个元素时选中那个元素

* 表单(http://api.jquery.com/category/selectors/form-selectors/)

$(":input") 

所有input节点(包括type为input, select, button, password, radio, reset, submit, text, file, image, hidden),select,textarea,button节点

$(":text") 

所有textarea节点

$(":password") 

所有type为password的input节点

$(":radio") 

所有type为radio的input节点

$(":checkbox") 

所有type为checkbox的input节点

$(":submit") 

所有type为submit的input节点和button节点

$(":image") 

所有type为image的input节点

$(":reset") 

所有type为reset的input节点

$(":button") 

所有type为button的input节点和button节点

$(":file") 

所有type为file的input节点

$(":hidden") 

最初没有显示的元素(style为display:none;的div或type为hidden的input)

* 表单过滤器(http://api.jquery.com/category/selectors/form-selectors/)

$("input:enabled") 

所有没有disabled属性的集合

$("input:disabled") 

所有disabled属性为disabled的集合

$("input:checked") 

所有checked属性为checked(或被鼠标勾上的)的集合(通常是form的input type="checkbox"节点)(checkbox和radio按钮)

$("select option:selected") 

所有selected属性为selected(或被鼠标选中)的集合(通常是select的option节点)

el.is(":focus")

判断当前是否是焦点

* 属性读写(读取或修改标签属性、样式和文本或表单内容和选项)(http://api.jquery.com/category/attributes/)

* 修改标签属性(非"class")的值

var title = $("em").attr("title")

返回指定标签名(如"em")的首个标签的属性(如"title")的属性值。

$("img").attr({src: "/images/hat.gif", title: "jQuery", alt: "jQuery Logo"});

动态设置标签属性的值(注意IE的class属性需要使用.addClass(class)/.removeClass(class))

$("button:gt(0)").attr("disabled","disabled");

设置指定标签集合的属性名和属性值

$("div").attr("id", function (arr) {return "div-id" + arr;}).each(function() {$("span", this).html("(ID = '<b>" + this.id + "</b>')");});

通过闭包动态设置标签属性的值,闭包参数arr是索引(旧版本的jQuery是arr[0]),返回值可以使用.each()和this。

$("button").click(function () {$(this).next().removeAttr("disabled").focus().val("editable now");});

删除指定标签的属性(后面可以继续操作)

* 修改标签class属性的值

$("p:last").addClass("selected");

把css的.selected样式应用在指定的标签上

$("p:even").removeClass("blue");

删除指定标签上的.blue样式

$("p").click(function () {$(this).toggleClass("highlight");});

翻转(应用或删除)标签上的highlight属性(一般用于交互动作的闭包内)

var count = 0; $("p").click(function(){$(this).toggleClass("highlight", count++ % 3 == 0);});

利用布尔值决定应用还是删除特定的css样式(一般用于交互动作的闭包内)

* 访问XHTML的html字符串

var htmlStr = $(this).html();

获取标签内的html字符串(相当于innerHTML),对XML无效,仅对XHTML有效。

$("div").html("<span class='red'>Hello <b>Again</b></span>");});

设置标签内的html字符串,对XML无效,仅对XHTML有效。

* 访问XML和XHTML的纯文本(指标签夹住的内容,包括里面嵌套的子标签)

$("div").text()

获取标签内的纯文本

$("p").text("<b>Some</b> new text.");$("input").val($("p").html());

设置标签内的纯文本(最终得到的html文本html()会对'<'和'>'进行转义)

* 访问表单的当前选择值

function displayVals() {var singleValues = $("#single").val();$("p").html("<b>Single:</b> " + singleValues);} $("select").change(displayVals);

动态获取<select>表单的当前选择项(一般用在交互动作的闭包内),如果表单的属性multiple="multiple",则返回值是数组(一般写法是var multipleValues = $("#multiple").val() || [];)

$("input").val(text);$("#single").val("Single2");$("#multiple").val(["Multiple2", "Multiple3"]);$("input").val(["check2", "radio1"]);

动态设置表单元素(如文本框)的内容或选中表单元素(如单选框,复选框,单选按钮,多选按钮)的文本项(一般用在交互动作的闭包内)

* 新增

if($(this).hasClass("protected")){}

判断class属性是否等于某个值

$input.prop('checked')

获取选中集合中第一个元素的该属性的值(jQuery 1.6新增,不同于.attr())

$para.prop("luggageCode", 1234);

指定属性

$para.removeProp("luggageCode");

删除属性

* 遍历(子选择器,或并集)(http://api.jquery.com/category/traversing/)

* 索引、条件过滤或条件判断,集合映射(http://api.jquery.com/category/traversing/filtering/)

$("div").eq(2).addClass("red");

索引(0至n-1)相等过滤

if($(this).hasClass("protected")){}

判断class属性是否等于某个值

$("div").css("background", "#c8ebcc").filter(".middle").css("border-color", "red");

条件过滤(保留选择器选中的集合)

$("div").css("background", "#b4b0da").filter(function(index) {return index == 1 || $(this).attr("id") == "fourth";}).css("border", "3px double red");

用闭包遍历,如果闭包返回的不是false就保留

if($(this).is(":first-child")){}

判断指定jQuery对象是否满足指定的选择器。

$("p").append($("input").map(function(){return $(this).val();}).get().join(", ") );

遍历相同类型的表单元素并用闭包映射为指定属性值的集合

$("div").not(".green, #blueone").css("border-color", "red");

相反条件过滤(删除选择器选中的集合)

$div.slice(start, end).css("background", "yellow");

返回指定索引(从0开始)范围内的集合

$("p span").last().addClass('highlight');

选中集合中最后一个元素

$("ul").has("li").addClass("full");

选中集合中的子节点符合特定选择器或DOM的所有元素

* 查找(全体子孙元素、兄弟元素、父级元素,或其选择器过滤)(http://api.jquery.com/category/traversing/tree-traversal/)

$("div").css("border", "2px solid red").add("p").css("background", "yellow");

获取两个选择器的并集,后面的操作同时作用在.add()的选择器参数和前面的选择器。

var $kids = $(e.target).children();

获取所有子元素,参数可传入选择器(一般用于交互闭包)

$(e.target).closest("li")

最接近的子元素(一般用于交互闭包)

$("p").contents().not("[nodeType=1]").wrap("<b/>");

文本节点包含的所有子元素

$("p").find("span").css('color','red');

所有子孙元素中用选择器过滤

$("button[disabled]").next().text("this button is disabled");

获取下一个紧挨着的兄弟(平行)DOM元素,参数可传入选择器。

$curr = $curr.prev();

获取上一个紧挨着的兄弟(平行)DOM元素,参数可传入选择器。

$("div:first").nextAll().addClass("after");

获取后面所有兄弟(平行)DOM元素,参数可传入选择器。

$("div:last").prevAll().addClass("before");

获取前面所有兄弟(平行)DOM元素,参数可传入选择器。

var len = $(".hilite").siblings().css("color", "red").length;

            获取所有兄弟(平行)DOM元素,参数可传入选择器。

var parentTag = $(this).parent().get(0).tagName;

获取父级DOM元素,参数可传入选择器。

$("#term-2").nextUntil("dt").css("background-color", "red");

获取后面的兄弟(平行)DOM元素(不包括自己),直至遇到符合选择器的元素(即得到的结果不符合选择器的条件)。

$('li.item-a').offsetParent().css('background-color', 'red');

获取最近的祖先节点

$('li.item-a').parents().css('background-color', 'red');

获取所有父节点

$("li.item-a").parentsUntil(".level-1").css("background-color", "red");

获取所有父节点,直至遇到符合选择器的元素(即得到的结果不符合选择器的条件)

$("#term-2").prevUntil("dt").css("background-color", "red");

获取前面的兄弟(平行)DOM元素(不包括自己),直至遇到符合选择器的元素(即得到的结果不符合选择器的条件)。

* 链式选择器(http://api.jquery.com/category/traversing/miscellaneous-traversal/)

$("div").find("p").andSelf().addClass("border");

取子选择器和父选择器的并集(如$()和.find()的结果的并集)。

$("p").showTags(0).find("span").showTags(1).css("background", "yellow").end().showTags(2).css("font-style", "italic");

丢弃所有子选择器,重置为最初的$()选择器。

$("div").css("border", "2px solid red").add("p").css("background", "yellow");

获取两个选择器的并集,后面的操作同时作用在.add()的选择器参数和前面的选择器。

$("p").contents().not("[nodeType=1]").wrap("<b/>");

文本节点包含的所有子元素

* 操作(http://api.jquery.com/category/manipulation/)

* 内部单向插入(http://api.jquery.com/category/manipulation/dom-insertion-inside/)

$("p").append("<b>Hello</b>");

内容的后面添加html字符串

$("span").appendTo("#foo")

第一个选择器添加(移动)到第二个选择器内容的后面

$("p").prepend("<b>Hello </b>");

内容的前面添加html字符串

$("span").prependTo("#foo");

第一个选择器添加(移动)到第二个选择器内容的前面

$("div").html("<span class='red'>Hello <b>Again</b></span>");});

设置标签内的html字符串,对XML无效,仅对XHTML有效。

$("p").text("<b>Some</b> new text.");$("input").val($("p").html());

设置标签内的纯文本(最终得到的html文本html()会对'<'和'>'进行转义)

* 外部单向插入(http://api.jquery.com/category/manipulation/dom-insertion-outside/)

$("p").after("<b>Hello</b>");

标签后面添加html字符串

$("p").before("<b>Hello</b>");

标签前面添加html字符串

$("p").insertAfter("#foo");

第一个选择器添加(移动)到第二个选择器标签的后面

$("p").insertBefore("#foo"); 

第一个选择器添加(移动)到第二个选择器标签的前面

* 附近双向插入(环绕)(http://api.jquery.com/category/manipulation/dom-insertion-around/)

$("p").wrap("<div class='wrap'><b></b></div>");

用html字符串逐个包围目标标签(目标标签在内)

$("p").wrap($('#content'));

用第二选择器的标签逐个(移动并)包围目标标签(目标标签在内)

$("p").wrapAll("<div></div>");

用html字符串一次包围所有目标标签(目标标签在内)

$("p").wrapAll(document.createElement("div"));

用第二选择器的标签一次包围所有目标标签(目标标签在内)

$("p").wrapInner("<b></b>");

目标标签逐个包围指定的html字符串(目标标签在外)

$("p").wrapInner(document.createElement("b"));

目标标签逐个包围第二选择器标签(目标标签在外)

$("p").unwrap();

删除环绕的标签

* 替换(http://api.jquery.com/category/manipulation/dom-replacement/)

$(this).replaceWith("<div>" + $(this).text() + "</div>");

目标标签被替换为html字符串

$("<b>Paragraph. </b>").replaceAll("p");

用html字符串替换所有选择器的标签

* 删除(http://api.jquery.com/category/manipulation/dom-removal/)

$("p").empty();

删除选择器标签所有子要素、事件句柄和内部缓存数据。

$("p").remove();

删除选择器标签所有要素,可传入选择器参数

p = $("p").detach();

删除元素,类似.remove(),但保留相关的jQuery对象。

$("p").unwrap();

删除环绕的标签

* 复制(http://api.jquery.com/category/manipulation/copying/)

$("b").clone().prependTo("p");

复制出相同标签以便进行插入操作(此时这个复制对象成为当前目标)

$(this).clone(true).insertAfter(this);

复制出相同标签,true表示复制其事件句柄(此时这个复制对象成为当前目标)

* 类属性操纵(新增)(http://api.jquery.com/category/manipulation/class-attribute/)

$("p:last").addClass("selected");

把css的.selected样式应用在指定的标签上

$("p:even").removeClass("blue");

删除指定标签上的.blue样式

if($(this).hasClass("protected")){}

判断class属性是否等于某个值

$("p").click(function () {$(this).toggleClass("highlight");});

翻转(应用或删除)标签上的highlight属性(一般用于交互动作的闭包内)

* 通用属性(新增)(http://api.jquery.com/category/manipulation/general-attributes/)

var title = $("em").attr("title")

返回指定标签名(如"em")的首个标签的属性(如"title")的属性值。

$input.prop('checked')

获取选中集合中第一个元素的该属性的值(jQuery 1.6新增,不同于.attr())

$("button").click(function () {$(this).next().removeAttr("disabled").focus().val("editable now");});

删除指定标签的属性(后面可以继续操作)

$para.removeProp("luggageCode");

删除属性

function displayVals() {var singleValues = $("#single").val();$("p").html("<b>Single:</b> " + singleValues);} $("select").change(displayVals);

动态获取<select>表单的当前选择项(一般用在交互动作的闭包内),如果表单的属性multiple="multiple",则返回值是数组(一般写法是var multipleValues = $("#multiple").val() || [];)

$("input").val(text);$("#single").val("Single2");$("#multiple").val(["Multiple2", "Multiple3"]);$("input").val(["check2", "radio1"]);

动态设置表单元素(如文本框)的内容或选中表单元素(如单选框,复选框,单选按钮,多选按钮)的文本项(一般用在交互动作的闭包内)

* 层叠样式表(CSS)

(http://api.jquery.com/category/css/)

(http://api.jquery.com/category/manipulation/style-properties/)

* 读写style属性字符串的键值对

var color = $(this).css("background-color"); //style="background-color:blue;"

读取style属性字符串中CSS属性对应的值

$(this).css({ backgroundColor:"yellow", fontWeight:"bolder" });

用哈希表修改style属性字符串(多个CSS键值对)

$(this).css("color","red");

修改一对style属性字符串(单个CSS键值对)

* 位置(偏移)(http://api.jquery.com/category/offset/)

var p = $("p:last"); var offset = p.offset(); p.html( "left: " + offset.left + ", top: " + offset.top );

文档的偏移位置(.left和.top)

var p = $("p:first"); var position = p.position(); $("p:last").text( "left: " + position.left + ", top: " + position.top );

相对于父节点的位置(.left和.top),单位是像素

$('#out').text('scrollTop: '+$(this).scrollTop());

获取上下滚动(条)的位置

$('div').scrollTop(50);

设置上下滚动(条)的位置

$('#out').text('scrollLeft: '+$(this).scrollLeft());

获取左右滚动(条)的位置

$('div').scrollLeft(100);

设置左右滚动(条)的位置

$('li.item-a').offsetParent().css('background-color', 'red');

获取最近的祖先节点

* 高度和宽度(例如:div {width: 200px;border: 3px solid black;padding: 2px;margin: 5px;})(http://api.jquery.com/category/dimensions/)

$("p").height()

获取标签或文档的高度

$(this).height(30).css({cursor:"auto", backgroundColor:"green"});

设置标签的高度,参数以像素为单位

$("p").width()

获取标签或文档的宽度

$(this).width(30).css({cursor:"auto", "background-color":"blue"});

设置标签的宽度,参数以像素为单位

$('div').text('innerHeight: '+$('div').innerHeight());

获取内部(排除border但包含padding)高度

$('div').text('innerWidth: '+$('div').innerWidth());

获取内部(排除border但包含padding)宽度

$('div:last').text('outerHeight with margin: '+$('div:last').outerHeight({margin: true}));

获取外部(包括border、padding)高度,可指定{margin: true}参数,也可以缺省

$('div:last').text('outerWidth with margin: '+$('div').outerWidth({margin: true}));

获取外部(包括border、padding)宽度,可指定{margin: true}参数,也可以缺省

* 新增

$("p:last").addClass("selected");

把css的.selected样式应用在指定的标签上

$("p:even").removeClass("blue");

删除指定标签上的.blue样式

if($(this).hasClass("protected")){}

判断class属性是否等于某个值

$("p").click(function () {$(this).toggleClass("highlight");});

翻转(应用或删除)标签上的highlight属性(一般用于交互动作的闭包内)

$.cssHooks["someCSSProp"] = {get: function( elem, computed, extra ) {},set: function( elem, value ) {}};

代理css属性的设置和获取

* 事件(http://api.jquery.com/category/events/)

* 页面加载(http://api.jquery.com/category/events/document-loading/)

$(document).ready(function(){});

DOM准备好后执行闭包

* 事件处理(依附)(http://api.jquery.com/category/events/event-handler-attachment/)

$("p").bind("click", function(){alert( $(this).text() );});

添加事件句柄

function handler(event) {alert(event.data.foo);} $("p").bind("click", {foo: "bar"}, handler)

处理事件参数

$("form").bind("submit", function() {return false;})

取消提交事件(返回false)

$("form").bind("submit", function(event){event.preventDefault();});

只阻止默认操作

$("form").bind("submit", function(event){event.stopPropagation();});

只阻止冒泡(沿着DOM树向上传递)但不阻止默认操作

$("p").bind("myCustomEvent", function(e, myName){}); $("p").trigger("myCustomEvent", [ "John" ]);

处理和发送定制事件

$("div").one("click", function(){});

只处理一次事件(第二参数可以是data)

$("form:first").trigger("submit")

发送事件

$("p").click(function (event, a, b) {}).trigger("click", ["foo", "bar"]);

发送事件,传递参数给闭包

$("input").triggerHandler("focus");

发送事件(阻止默认动作;只应用第一个对象;阻止冒泡;返回最后的句柄返回的值而非jQuery对象)

$("#theone").unbind('click', aClick).text("Does nothing...");

删除事件句柄。

$("body").delegate("p", "click", function(){$(this).after("<p>Another paragraph!</p>");});

给特定根选择器下的子选择器的(现在和将来的)所有元素添加事件句柄。

$("body").undelegate("#theone", "click", aClick)

删除.delegate()指定的事件句柄。

var obj = {name: "John",test: function() {$("#log").append( this.name );$("#test").unbind("click", obj.test);}}; $("#test").click( jQuery.proxy( obj, "test" ) );

改变事件回调的上下文(this对象)

* 交互辅助函数((http://api.jquery.com/category/events/mouse-events/))

$("li").hover(function(){},function(){});

鼠标滑进和滑出事件

$("li").toggle(function(){},function(){});

鼠标多次点击事件

* 现场事件(http://api.jquery.com/category/events/event-handler-attachment/)

$("p").live("click", function(){});

添加live事件句柄(选择器对未来动态增加的DOM也有效)

$("#theone").die("click", aClick)

            删除live事件句柄

* 事件辅助函数(bind/trigger的缩写、快捷方式,可以在添加事件句柄后立刻执行无参数的事件)

(http://api.jquery.com/category/events/browser-events/)

(http://api.jquery.com/category/events/form-events/)

(http://api.jquery.com/category/events/keyboard-events/)

(http://api.jquery.com/category/events/mouse-events/)

$('#target').blur();

表单元素失去焦点

$('#target').blur(function() {alert('Handler for .blur() called.');});  

表单元素失去焦点的事件

$("select").change();

表单改变

$("select").change(function(){}).change();

表单改变事件

$("p").click()

鼠标点击

$("p").click(function(){})

鼠标点击事件

$("p").dblclick()

鼠标双击

$("p").dblclick(function(){})

鼠标双击事件

$("img").error();

加载错误

$("img").error(function(){});

加载错误事件

$("input").focus();

获取焦点

$("input").focus(function(){alert(this.type+" got focus.");});

获取焦点事件

$(window).keydown();

键盘按下

$(window).keydown(function(e){$("div").text(e.keyCode);return false;});

键盘按下事件

$("input").keypress();

键盘输入

$("input").keypress(function (e) {$("div").text(e.which);});

键盘输入事件

$(window).keyup();

键盘弹起

$(window).keyup(function(e){$("div").text(e.keyCode);});

键盘弹起事件

$(window).load(function(){});

加载事件

$(window).mousedown(function(){})

鼠标按下事件

$(window).mousemove(function(){})

鼠标移动事件

$(window).mouseout(function(){})

鼠标移出事件

$(window).mouseover(function(){})

鼠标移入事件

$(window).mouseup(function(){})

鼠标弹起事件

$(window).resize(function(){})

改变大小事件

$(window).scroll(function(){})

滚动事件

$(document).select();

文本选择

$(document).select(function () {});

文本选择事件

$("form").submit();

表单提交

$("form").submit(function(){});

表单提交事件

$(window).unload(function(){alert("Bye now!");});

页面关闭事件

$("p").focusin(function() {});

支持冒泡的得到焦点事件(检测父节点)

$("p").focusout(function() {});

支持冒泡的失去焦点事件(检测父节点)

$("div.enterleave").mouseenter(function(){});

鼠标进入(IE专用)

$("div.enterleave").mouseleave(function(){});

鼠标离开(IE专用)

* (新增)事件对象(http://api.jquery.com/category/events/event-object/)

var e = jQuery.Event("click");jQuery("body").trigger( e );

生成一个新的事件对象(不使用new),然后发送。

var e = jQuery.Event("keydown", { keyCode: 64 });

指定事件的属性

$("p").click(function(event) {alert( event.currentTarget === this );});  

冒泡阶段的当前对象(如果使用jQuery.proxy,this是提供的上下文对象)

$(this).bind('click', {index:i}, function(e){alert('my index is ' + e.data.index);});

读取bind传入的第二参数对象。

$("a").click(function(event){alert(event.isDefaultPrevented());event.preventDefault();alert(event.isDefaultPrevented());});  

判断是否执行preventDefault。

e.isImmediatePropagationStopped()

判断是否执行stopImmediatePropagation。

e.isPropagationStopped()

判断是否stopPropagation

$("p").bind("test.something", function(event) {alert( event.namespace );});

读取自定义事件的事件名(如"test.something")

$(document).bind('mousemove',function(e){$("#log").text("e.pageX: " + e.pageX + ", e.pageY: " + e.pageY); });

读取相对于左上角的X坐标(iframe内)

$(document).bind('mousemove',function(e){$("#log").text("e.pageX: " + e.pageX + ", e.pageY: " + e.pageY); });

读取相对于左上角的Y坐标(iframe内)

$("a").click(function(event) {event.preventDefault();$('<div/>').append('default ' + event.type + ' prevented').appendTo('#log');});

阻止默认操作(例如URL的跳转)

$("a").mouseout(function(event) {alert(event.relatedTarget.nodeName);});  

如果是mouseout事件,是进入的对象,如果是mouseover,是移出的对象。

$("button").click(function(event) {return "hey";});$("button").click(function(event) {$("p").html( event.result );});

读取事件处理句柄返回的值,如果没有返回值则为undefined

$("p").click(function(event){event.stopImmediatePropagation();});$("p").click(function(event){$(this).css("background-color", "#f00");}); 

处理句柄剩下语句继续执行,但其他冒泡经过的注册处理句柄不执行。

$("p").click(function(event){event.stopPropagation();}); 

阻止冒泡和阻止执行父处理句柄。

$("body").click(function(event) {$("#log").html("clicked: " + event.target.nodeName);});

产生事件对象的DOM节点(最上层)

var last, diff;$('div').click(function(event) {if ( last ) {diff = event.timeStamp - last;$('div').append('time since last event: ' + diff + '<br/>');} else {$('div').append('Click again.<br/>');}last = event.timeStamp;}); 

点击时间(距离1970年1月1日的毫秒数)

$("a").click(function(event) {alert(event.type);}); 

返回事件的字符串(如"click")

$('#whichkey').bind('keydown',function(e){$('#log').html(e.type + ': ' +  e.which );});

返回键盘和鼠标的按钮号

* 显示效果、动画(http://api.jquery.com/category/effects/)

* 基本(http://api.jquery.com/category/effects/basics/)

$("p").show(); //<p style="display: none">Hello</p>

显示隐藏的元素(style="display: none"或hide())

$('#book').show('slow', function() {});

逐渐显示隐藏的元素,可以传入一个速度参数(毫秒单位或slow,normal,fast)和一个完成回调

$("p").hide();

隐藏显示的元素

$("p").hide("slow");

逐渐隐藏显示的元素,可以传入一个速度参数(毫秒单位或slow,normal,fast)和一个完成回调

$("p").toggle(); //<p>Hello</p> <p style="display: none">Good Bye</p>

翻转显示,根据显示的状态决定显示还是隐藏(通常目标选择器总是选中两个节点,一个隐藏一个显示)

var flip = 0;$("button").click(function () {$("p").toggle((flip++ % 2)==0);});

根据布尔值决定是显示还是隐藏元素。

$("p").toggle(2000);

逐渐翻转显示,可传入一个完成回调

* 滑动出现(http://api.jquery.com/category/effects/sliding/)

$("div").slideDown("slow");

向下滑动逐渐显示,可传入速度参数和一个完成回调

$("div").slideUp();

向上滑动逐渐隐藏,可传入速度参数和一个完成回调

$("p").slideToggle();

向下滑动逐渐显示或向上滑动逐渐隐藏,可传入速度参数和一个完成回调

* 透明度渐变(http://api.jquery.com/category/effects/fading/)

$("div:hidden:first").fadeIn("slow");

渐进显示,可传入速度参数和一个完成回调

$("p").fadeOut("slow");

渐出隐藏,可传入速度参数和一个完成回调

$(this).fadeTo("slow", 0.33);

渐变到指定透明度,可传入速度参数,透明度和一个完成回调

$("p:first").fadeToggle("slow", "linear");  $("p:last").fadeToggle("fast", function () {$("#log").append("<div>finished</div>");});

如果对象可视,执行fadeOut,否则执行fadeIn,可以接收三种参数:持续时间或速度类型,缓动类型,结束回调。

* 定制

(http://api.jquery.com/category/effects/custom-effects/)

(http://api.jquery.com/category/data/)

$("#block").animate({width: "70%",opacity: 0.4,marginLeft: "0.6in",fontSize: "3em", borderWidth: "10px"}, 1500 );

定制动画,第一参数是哈希表表示style的变化趋势,第二参数是持续时间(毫秒单位或slow,normal,fast)

$(".block").animate({"left": "+=50px"}, "slow");

动画移动

$(".block").animate({height: "toggle", opacity: "toggle"},"slow");

动画翻转

jQuery.extend(jQuery.easing,{easeInQuart: function (x, t, b, c, d) {return c*(t/=d)*t*t*t + b;},});

$(".block").animate({width: "toggle", opacity: "toggle"},"slow", "easeInQuart");

编写动画的回调插件,第三参数传入回调名,第四参数可传入完成回调

$(".block").animate({width: "toggle", opacity: "toggle"},{duration: "slow", easing: "linear",complete: function(){alert("completed!");},step: function(s){$("#steps").text(s)}});

定制动画,第一参数设置style的变化趋势,第二参数设置duration(持续时间)、easing(变化规律)、complete(完成回调)、step(进帧回调)、queue(是否保存在队列中)

$(".block").stop();

停止动画

var n = $("div").queue(); $("span").text("Queue length is: " + n.length);

动画队列(目标可能有多个动画同时进行)

$("div").queue(function () {$(this).removeClass("newcolor");$(this).dequeue();});

在动画队列后添加一个回调

$("div").queue([]);

设置动画队列(通常用[]置空)

$(this).dequeue();

从队列开头取出然后执行(用于queue回调内执行)

$("div").clearQueue();

删除队列中还没有运行过的所有条目(包括非动画的回调函数),与.stop(true)相似但不同。

$("div.first").slideUp(300).delay(800).fadeIn(400);

延时指定的毫秒数,可以传入队列名作为第二参数。

* 设置

(http://api.jquery.com/category/effects/custom-effects/)

(http://api.jquery.com/category/properties/)

jQuery.fx.off = !$(this).attr("checked");

是否全局关闭动画效果

jQuery.fx.interval = 100;

动画的帧间隔时间,默认13毫秒,用于调整动画帧率。不会影响浏览器的requestAnimationFrame属性。

* 异步JavaScript和XML(Ajax)(http://api.jquery.com/category/ajax/)

* Ajax请求

(http://api.jquery.com/category/ajax/low-level-interface/)

(http://api.jquery.com/category/ajax/shorthand-methods/)

$.ajax({type: "GET",url: "test.js",dataType: "script"});

异步读取脚本

$.ajax({type: "POST",url:"some.php",data: "name=John&location=Boston",success: function(msg){alert( "Data Saved: " + msg );}});

异步发送参数,成功后把接受数据传给回调

$.ajax({url: "test.html",cache:false,success: function(html){$("#results").append(html);}});

获取最新的html内容

var html = $.ajax({url: "some.php",async: false}).responseText;

同步读取数据,代替回调方式的闭包进行数据读取。

var xmlDocument = [create xml document]; $.ajax({url: "page.php",processData: false,data: xmlDocument,success: handleResponse});

发送XML格式的数据(让processData为false避免文本转换)

$("#links").load("/jquery/ #top-news div[class=inner]");

读取HTML文本后插入到DOM中,第一参数是URL,可以使用url、#id和选择器,可以传入请求的键值对作为第二参数,完成回调为第三参数。

$.get("test.php");

GET方式发送HTML请求

$.get("test.php", { name: "John", time: "2pm" } );

GET方式发送带键值数据的HTML请求

$.get("test.php", function(data){alert("Data Loaded: " + data);});

使用回调接收返回的数据

$.get("test.cgi", { name: "John", time: "2pm" },function(data){alert("Data Loaded: " + data);});

带键值数据的HTML GET请求,使用回调接收返回的数据。

$.getJSON("test.js", function(json){alert("JSON Data: " + json.users[3].name);});

使用回调接收返回的JSON对象

$.getJSON("test.js", { name: "John", time: "2pm" }, function(json){alert("JSON Data: " + json.users[3].name);}); } );

带键值数据的HTML GET请求,使用回调接收返回的JSON对象(可以使用$().html()嵌入到HTML中)

$.getScript("test.js");

读取JavaScript脚本,然后执行

$.getScript("test.js", function(){alert("Script loaded and executed.");});

读取JavaScript脚本,然后执行,最后调用回调。

$.post('ajax/test.html', function(data) {$('.result').html(data);});

POST方式发送请求,通过回调获取返回的数据

$.post("test.php", { name: "John", time: "2pm" } );

POST方式发送带键值数据的HTML请求。

$.post("test.php", { name: "John", time: "2pm" },function(data){alert("Data Loaded: " + data);});

POST方式发送带键值数据的HTML请求,用回调读取返回的数据

$.post("test.php", { "func": "getNameAndTime" },function(data){alert(data.name);console.log(data.time);}, "json");

POST方式发送带键值数据的HTML请求,用回调读取返回的数据,发送的数据格式为json

$.ajaxPrefilter( function( options, originalOptions, jqXHR ) {});

在发送数据前和执行.ajax()前定制Ajax选项或修改原有选项或保存jqXHR。

* Ajax事件(全局的回调函数,可附在任意jQuery对象上,常用于日志输出)(http://api.jquery.com/category/ajax/global-ajax-event-handlers/)

$("#msg").ajaxComplete(function(event,request, settings){$(this).append("<li>Request Complete.</li>");});

ajax通信结束后执行回调

$("#msg").ajaxError(function(event, request, settings){$(this).append("<li>Error requesting page " + settings.url + "</li>");});

ajax通信错误后执行回调

$("#msg").ajaxSend(function(evt, request, settings){$(this).append("<li>Starting request at " + settings.url + "</li>");});

ajax通信发送前执行回调

$("#loading").ajaxStart(function(){$(this).show();});

ajax通信发送开始时执行回调

$("#loading").ajaxStop(function(){$(this).hide();});

ajax通信请求结束时执行回调

$("#msg").ajaxSuccess(function(evt, request, settings){$(this).append("<li>Successful Request!</li>");});

ajax通信请求成功时执行回调

* Ajax杂项

(http://api.jquery.com/category/ajax/helper-functions/)

(http://api.jquery.com/category/ajax/low-level-interface/)

$.ajaxSetup({url: "/xmlhttp/",global: false,type: "POST"});$.ajax({ data: myData });

设置Ajax请求的默认值,可反复设置(不影响全局的Ajax事件回调)

var str = $("form").serialize();

把表单数据转为=和&分隔的键值对字符串

var fields = $(":input").serializeArray();

把表单数据转为JSON对象

var params = { width:1680, height:1050 };var str = jQuery.param(params);

把对象转为=和&分割的URL参数字符串(类似.serialize())

* 实用工具

(http://api.jquery.com/category/miscellaneous/)

(http://api.jquery.com/category/utilities/)

* 用户代理

(http://api.jquery.com/category/utilities/)

(http://api.jquery.com/category/properties/)

$.support

哈希表,指出jQuery在不同浏览器上的特性差别

jQuery.browser

哈希表,指出当前浏览器类型和版本信息

jQuery.browser.version

浏览器版本号

jQuery.boxModel

是否使用W3C CSS Box Model,除了IE是false外其余都是true

* 数组和对象操作

(http://api.jquery.com/category/miscellaneous/collection-manipulation/)

(http://api.jquery.com/category/utilities/)

jQuery.each(arr, function() {$("#" + this).text("My id is " + this + ".");return (this != "four");});

遍历数组,this为数组元素,返回false时停止遍历

jQuery.each(obj, function(i, val) {$("#" + i).append(document.createTextNode(" - " + val));});

遍历哈希表的键值对,第一参数为键,第二参数为值。

$.extend(object1, object2);

把第二对象合并到第一对象,如果键名相同,前者的键值对被后者的键值对取代

$.extend(true, object1, object2);

递归合并(如果值为对象,值对象也进行合并)

var empty = {}; var settings = $.extend(empty, defaults, options);

合并后保存在新的对象上,不修改原来两个对象

arr = jQuery.grep(arr, function(n, i){return (n != 5 && i > 4);});

用闭包过滤(返回true的话保留)后返回结果,不影响原数组,闭包的第一参数是元素值,第二参数是数组索引,grep的第三参数如果传入true则翻转过滤

var arr = jQuery.makeArray(document.getElementsByTagName("div")); arr.reverse();

把对象转为数组

arr = jQuery.map(arr, function(n, i){return (n.toUpperCase() + i);});

用闭包把数组映射为新的数组。如果返回值为null不映射,如果返回数组则拼接到结果数组中。

jQuery.inArray("John", arr)

返回最初找到的索引,如果找不到,返回-1

divs = jQuery.unique(divs);

删除数组的重复元素然后返回结果。

* 检查(http://api.jquery.com/category/utilities/)

$.isArray([])

判断是否数组,如果是对象则返回false。

jQuery.isFunction(objs[i])

判断是否函数

* 字符串操作(http://api.jquery.com/category/utilities/)

str = jQuery.trim(str);

删除字符串前后的空白,然后返回。

* 内部使用(http://api.jquery.com/category/internals/)

* 数据缓存

(http://api.jquery.com/category/miscellaneous/data-storage/)

(http://api.jquery.com/category/data/)

var id = jQuery.data(e.target);

指定元素的内部处理的ID

var adiv = $("#adiv").get(0);var value;value = jQuery.data(adiv, "blah");

从元素的缓存中取出键名对应的值

var adiv = $("div").get(0);jQuery.data(adiv, "test", { first: 16, last: "pizza!" });

从元素的缓存中保存键值对。

jQuery.removeData(adiv);

删除元素的缓存数据

jQuery.removeData(adiv, "test1");

通过键名删除元素缓存的键值对

* Ajax(http://api.jquery.com/category/miscellaneous/collection-manipulation/)

var params = { width:1680, height:1050 };var str = jQuery.param(params);

把对象转为=和&分割的URL参数字符串(类似.serialize())

* 新增

(http://api.jquery.com/category/internals/)

(http://api.jquery.com/category/properties/)

$("ul").context  $("ul", document.body).context.nodeName

jQuery 1.3以后,获取jQuery对象上的DOM对象,主要用于插件。

jQuery.error = console.error;

重载error方法。jQuery.error是用于发送包含其第一参数字符串的异常

b = $('body'); if(b.jquery) {}; $.fn.jquery;

获取对象的jQuery版本字符串,可用于判断是否jQuery对象。

jQuery([]).pushStack( document.getElementsByTagName("div") ).remove().end();

把DOM元素集合压入jQuery堆栈

* (新增)插件(http://api.jquery.com/category/plugins/)

* 数据链接(http://api.jquery.com/category/plugins/data-link/)

var person = {};$("form").link(person);$("[name=firstName]").val("NewValue"); person.firstName;

把表单的修改绑定到特定的对象属性上

$("form").unlink(person);

移除表单的绑定

* 模板(把对象和数组渲染成HTML DOM)(http://api.jquery.com/category/plugins/templates/)

(TODO:现在仍处于beta阶段)

* (新增)延期对象(观察Ajax和动画的操作)(http://api.jquery.com/category/deferred-object/)

jQuery.Deferred()

创建延期对象。

$.get("test.php").always(function() {alert("$.get completed with success or error callback arguments"); });

不管成功还是失败都执行回调。

$.get("test.php").done(function(){alert("$.get succeeded");});

成功时执行回调。

$.get("test.php").done(function(){alert("$.get succeeded");}).fail(function(){alert("$.get failed!");});

失败时执行回调。

deferred.isRejected()

判断是否失败

deferred.isResolved()

判断是否成功

var defer = $.Deferred(),filtered = defer.pipe(function( value ) {return value * 2;});defer.resolve( 5 );filtered.done(function( value ) {alert( "Value is ( 2*5 = ) 10: " + value );});

成功过滤器,返回结果给.done的回调参数。

var defer = $.Deferred(),filtered = defer.pipe( null, function( value ) {return value * 3;});defer.reject( 6 );filtered.fail(function( value ) {alert( "Value is ( 3*6 = ) 18: " + value );});

失败过滤器,返回结果给.fail的回调参数。

var request = $.ajax( url, { dataType: "json" } ),chained = request.pipe(function( data ) {return $.ajax( url2, { data: { user: data.userId } } );});

串行执行ajax请求(链式任务)

function asyncEvent(){var dfd = new jQuery.Deferred();setTimeout(function(){dfd.resolve("hurray");}, Math.floor(Math.random()*1500));setTimeout(function(){dfd.reject("sorry");}, Math.floor(Math.random()*1500));return dfd.promise();}

$.when( asyncEvent() ).then(function(status){alert( status+', things are going well' );},function(status){alert( status+', you fail this time' );});

返回Promise对象(将来才得到真正的结果)

var obj = {hello: function( name ) {alert( "Hello " + name );}},defer = $.Deferred();defer.promise( obj );defer.resolve( "John" );

obj.done(function( name ){obj.hello( name );}).hello( "Karl" );

指定自定义的Promise对象(用于在.done()后链式调用)

deferred.reject(args)

手动执行失败句柄

deferred.rejectWith( context, [args] )

同reject,但指定this所指的对象

deferred.resolve( args )

手动执行成功句柄

deferred.resolveWith( context, [args] )

同resolve,但指定this所指的对象。

$.get("test.php").then(function(){ alert("$.get succeeded"); },function(){ alert("$.get failed!"); });

同时指定成功和失败句柄

var div = $( "<div />" );div.promise().done(function( arg1 ) {alert( this === div && arg1 === div );});

观察所有在jQuery对象上绑定的动作和动画完全结束,然后执行.done注册的句柄。

* (新增)工具(不包含上面重复的)(http://api.jquery.com/category/utilities/)

* 新增

jQuery.contains(document.documentElement, document.body);

判断第一参数的DOM是否包含第二参数DOM

jQuery.globalEval("var newVar = true;")

全局地执行JavaScript代码

jQuery.isEmptyObject({})

检查是否为没有属性的对象

jQuery.isPlainObject({}); console.log($.isPlainObject(document.location));

检查是否为纯对象(用{}和new Object创建,字符串字母值不是)

$.isWindow(window)

判断参数是否窗口

jQuery.isXMLDoc(document)

检查参数是否XML文档节点

var newArray = $.merge([], oldArray);

拼接两个数组并返回,但不改变参数。

jQuery.noop()

什么都不做,空函数。

jQuery.now()

当前时间,即(new Date).getTime()

var obj = jQuery.parseJSON('{"name":"John"}');alert( obj.name === "John" );

把JSON字符串转为JavaScript对象。

xmlDoc = $.parseXML( xml ),

把XML字符串转为XML文档对象。

jQuery.type(/test/)

返回参数的类名字符串

* (新增)数据(不包含上面重复的)(http://api.jquery.com/category/data/)

* 新增

jQuery.data(p, "testing", 123);$p.append(jQuery.hasData(p)+" "); jQuery.removeData(p, "testing");

判断是否有数据关联到jQuery对象上。

* (新增,TODO)现在仍处于beta阶段的API

* 模板(http://api.jquery.com/category/plugins/templates/)

 

(不完整,不准确,待修改)

 

你可能感兴趣的:(JavaScript)