第一章 選擇器##
1、基本選擇器###
<code>(".class")</code>:class選擇器,返回集合元素
<code>("*")</code>:通配符選擇器,選擇所有元素,返回集合元素
<code>$("selector1,selector2")</code>:選擇所有選擇器匹配的元素,返回集合元素
2、層次選擇器###
<code>("parent>child")</code>:選擇parent下的child子元素,
<code>("prev~siblings")</code>:獲取prev后面的所有同輩siblings元素
說明:
<code>("prev").next()</code>效果相等
<code>("prev").sibling()</code>效果相等
3、基本過濾選擇器###
<code>:first</code>:選取第一個元素,返回單個元素
<code>:last</code>:選取最后一個元素,返回單個元素
<code>:not(selector)</code>:去除所有給定選擇器所匹配的元素,返回集合元素
<code>:even</code>:選取索引為偶數的所有元素,索引號從0開始,返回集合元素
<code>:odd</code>:選取索引為奇數的所有元素,索引號從0開始,返回集合元素
<code>:ep(index)</code>:選取索引等于index的元素,index從0開始返回單個元素
<code>:gt(index)</code>:選取索引號大于index的所有元素,返回集合元素
<code>:lt(index)</code>:選取索引小于index的所有元素,返回集合元素
<code>:header</code>:選取所有的標題元素,返回集合元素
<code>:animated</code>:選取正在執行動畫的元素,返回集合元素
<code>:focus</code>:選取當前獲取焦點的元素,返回集合元素
4、內容過濾選擇器###
<code>:contains(text)</code>:選取含有文本內容為text的元素,返回集合元素
<code>:empty</code>:選取沒有子節點或者文本的空元素,返回集合元素
<code>:has(selector)</code>:選取含有選擇器所匹配的元素的元素,返回集合元素
<code>:parent</code>:選取含有子節點或者文本的元素,返回集合元素
5、可見性過濾選擇器###
<code>:hidden</code>:選取所有不可見的元素,返回集合元素
<code>:visible</code>:選取所有可見的元素,返回集合元素
6、屬性過濾選擇器###
<code>[attribute]</code>:選取含有此屬性的元素,返回集合元素
<code>:[attribute=value]</code>:選取屬性的值為value的元素,返回集合元素
<code>:[attribute!=value]</code>:選取屬性的值不為value的元素,返回集合元素
<code>:[attribute^=value]</code>:選取屬性的值以value開始的元素,返回集合元素
<code>:[attribute$=value]</code>:選取屬性的值以value結尾的元素,返回集合元素
<code>:[attribute*=value]</code>:選取屬性的值含有value的元素,返回集合元素
<code>:[attribute|=value]</code>:選取屬性的值等于value或者是以value為前綴(即“value-”,value后面跟一個連字符)的元素,返回集合元素
<code>:[attribute~=value]</code>:選取屬性的值以空格分隔的值中含有value的元素,返回集合元素
<code>:[attribute1][attribute1]……[attributeN1]</code>:用多個屬性選擇器合并成一個復合屬性選擇器,返回集合元素
7、子元素過濾選擇器###
<code>:nth-child(index/even/odd)</code>:選取父元素下的第index個子元素,index值從1開始,或者選取奇偶子元素,返回集合元素
<code>:first-child</code>:選取父元素下的第一個元素,返回集合元素
<code>:last-child</code>:選取父元素下的最后一個子元素,返回集合元素
<code>:only-child</code>:如果元素是父元素的唯一的元素,則選擇,否則,不選擇,返回集合元素
另外<code>:nth-child()</code>還可以通過數學表達式選取一組特定的元素,如:
<code>:nth-child(3n)</code>:選取父元素下所有3的倍數的子元素(n從1開始,即選取第3,6,9,……個元素)
10、表單選擇器###
<code>:input</code>:選取所有的input、textarea、select、button元素,返回集合元素
<code>:text</code>:選取所有單行文本框,返回集合元素
<code>:password</code>:選取所有的密碼框,返回集合元素
<code>:radio</code>:選取所有的單選框,返回集合元素
<code>:checkbox</code>:選取所有的多選框,返回集合元素
<code>:submit</code>:選取所有提交按鈕,返回集合元素
<code>:image</code>:選取所有的圖像按鈕,返回集合元素
<code>:reset</code>:選取所有的重置按鈕,返回集合元素
<code>:button</code>:選取所有的按鈕,返回集合元素
<code>:file</code>:選取所有的上傳域,返回集合元素
9、表單對象屬性過濾選擇器###
<code>:enabled</code>:選取所有可用元素,返回集合元素
<code>:disabled</code>:選取所有不可用元素,返回集合元素
<code>:checked</code>:選取所有被選中的元素(單選框和多選框),返回集合元素
<code>:selected</code>:選取所有被選中的元素(下拉列表),返回集合元素
第二章 DOM操作##
1、查找、設置、刪除屬性###
1、attr()方法:接受一個或兩個參數,一個參數是獲取屬性值,兩個參數是設置屬性,需要設置多個屬性時,attr方法的參數可以是一個由屬性和屬性值組成的json數據格式
$("div").attr("background");//獲取屬性值
$("div").attr("background","blue");//設置屬性值
$("div").attr({"background":"blue","height":"200px"});//設置多個屬性值
2、css()方法:接受一個或兩個參數,當一個參數是屬性名時,獲取屬性值,當兩個參數時,設置屬性第一個參數為屬性名,第二個參數為屬性值,需要設置多個屬性時,css方法的參數可以是一個由屬性和屬性值組成的json數據格式
$("div").css("background");//獲取屬性值
$("div").css("background","blue");//設置屬性值
$("div").css({"background":"blue","height":"200px"});//設置多個屬性值
另外width()方法和height()方法可以直接獲取寬度和高度
3、addClass():為元素添加class值,可批量添加屬性與值
$("div").addClass("myclass");
4、removeAttr():刪除指定的屬性
$("div").removeAttr("background");
5、removeClass():有參數時,刪除指定的class值,沒有參數時,刪除全部的class值
$("div").removeClass("myclass");
$("div").removeClass();
6、hasClass():判斷匹配的元素是否有某個class值,有則返回true,沒有則返回false
$("div").hasClass("myclass");
2、創建元素、文本、屬性節點###
均可以直接將元素、文本、屬性添加到("<p title='mytitle'>假裝是標題</p>")</code>
3、插入節點###
1、append():向元素內部添加節點,如:
html代碼:
<p>我是內容</p>
jQuery代碼:
$("p").append("<span>我是追加的內容</span>");
結果:
<p>我是內容<span>我是追加的內容</span></p>
2、appendTo():將元素添加到指定元素內部,即將append方法中的鏈式操作的成員互換位置
html代碼:
<p>我是內容</p>
jQuery代碼:
$("<span>我是追加的內容</span>").appendTo("p");
結果:
<p>我是內容<span>我是追加的內容</span></p>
3、prepend():向元素內部前置內容
html代碼:
<p>我是內容</p>
jQuery代碼:
$("p").prepend("<span>我是追加的內容</span>");
結果:
<p><span>我是追加的內容</span>我是內容</p>
4、prependTo():將節點前置到指定元素中,即將prepend方法中的鏈式操作中的成員互換位置
html代碼:
<p>我是內容</p>
jQuery代碼:
$("<span>我是追加的內容</span>").prependTo("p");
結果:
<p><span>我是追加的內容</span>我是內容</p>
5、after():在每個元素節點后添加節點
html代碼:
<p>我是內容</p>
jQuery代碼:
$("p").after("<span>我是追加的內容</span>");
結果:
<p>我是內容</p><span>我是追加的內容</span>
6、insertAfter():講節點插入到指定節點之后,即將after方法中的鏈式操作中的成員互換位置
html代碼:
<p>我是內容</p>
jQuery代碼:
$("<span>我是追加的內容</span>").insertAfter("p");
結果:
<p>我是內容</p><span>我是追加的內容</span>
7、before():再節點前面插入節點
html代碼:
<p>我是內容</p>
jQuery代碼:
$("p").before("<span>我是追加的內容</span>");
結果:
<span>我是追加的內容</span><p>我是內容</p>
8、insertBefore():將節點插入到指定元素前面
html代碼:
<p>我是內容</p>
jQuery代碼:
$("<span>我是追加的內容</span>").insertBefore("p");
結果:
<span>我是追加的內容</span><p>我是內容</p>
4、刪除節點###
1、remove():從DOM中刪除所有匹配的元素,同時該節點所包含的所有后代節點將同時被刪除,因為返回值是刪除節點的引用,因此可以在以后繼續使用這些元素,但是此時這些節點所綁定的事件也會刪除,如:
var $li=$("ul li:eq(1)").remove();//刪除節點
$li.appendTo("ul");//將節點添加回去
2、detach():和remove()幾乎一樣,不同的是detach方法不會刪除節點所綁定的事件和附加的數據
3、empty():清空所匹配的節點
$("ul li:eq(1)").empty();//此時第一個li標簽內無任何內容及節點了
5、復制節點###
clone():復制節點,可以有參數true,當有true參數時,將同時復制節點所綁定的事件,如:
$("ul li:eq(1)").clone(true).apppendTo("ul");
6、替換節點###
1、replaceWith():將匹配的節點替換成指定的節點
$("p").replaceWith("<ul><li></li></ul>");
2、replaceAll():用指定的節點替換相應節點,即將replaceWith方法中的鏈式操作中的成員互換位置
$("<ul><li></li></ul>").replaceWith("p");
7、包裹節點###
1、wrap():將匹配的節點用指定的節點單獨包裹起來
html代碼:
<p>我是內容</p>
<p>我是另一個內容</p>
jQuery代碼:
$("p").wrap("<span></span>");
結果:
<span><p>我是內容</p></span>
<span><p>我是另一個內容</p></span>
2、wrapAll():將匹配的節點用指定的節點全部包裹起來
html代碼:
<p>我是內容</p>
<p>我是另一個內容</p>
jQuery代碼:
$("p").wrap("<span></span>");
結果:
<span>
<p>我是內容</p>
<p>我是另一個內容</p>
</span>
3、wrapInner():將匹配的節點內部的節點或者文本內容用指定的節點包裹起來
html代碼:
<p>我是內容</p>
jQuery代碼:
$("p").wrapInner("<span></span>");
結果:
<p><span>我是內容</span></p>
8、設置、獲取文本、HTML和值###
1、html():類似于原生JavaScript中的innerHTML屬性,不含參數時是獲取,包含元素節點和文本節點,當內有字符串參數時,是重新設置節點內容和文本內容
$("p").html();
2、text():類似于原生JavaScript中的innerText屬性,不含參數時是獲取文本節點,當內有字符串參數時,是重新設置文本內容
$("p").text("我是內容");
3、val():類似于原生JavaScript中的value屬性,可以用來獲取和設置元素的值,無論是元素或者文本框,下拉列表或者單選框,如果元素是多選,則返回一個包含所有選擇的值的數組
9、遍歷節點###
1、children():獲取所有的子元素集合,返回一個數組,只考慮子元素,不考慮其他后代元素
html代碼:
<div>
<p>我是內容
<sapn>我是內嵌的內容</span>
</p>
<p>我是另一個內容</p>
</div>
jQuery代碼:
var $div=$("div").children();
$div.length;//返回2
2、next():獲取匹配元素后面緊鄰的同輩元素,效果類似于$("prev+next")
html代碼:
<div>
<p>我是內容
</p>
<h1>我是另一個內容</h1>
</div>
jQuery代碼:
var $h1=$("p").next();//返回h1元素節點
3、prev():獲取匹配元素前面緊鄰的同輩元素
html代碼:
<div>
<h1>我是另一個內容</h1>
<p>我是內容</p>
</div>
jQuery代碼:
var $h1=$("p").next();//返回h1元素節點
4、siblings():獲取匹配元素的前后所有的同輩元素,類似于$("prev~siblings")
html代碼:
<div>
<h1>我是另一個內容</h1>
<p>我是內容</p>
<ul>我是列表</ul>
</div>
jQuery代碼:
var $h1=$("p").next();//返回h1和ul元素節點
5、closest():獲取最近的符合匹配的一個父元素
html代碼:
<div>
<div class="div2">
<p>我是內容</p>
</div>
</div>
jQuery代碼:
var $div=$("p").closest();//返回class為div2的div元素
6、parent():獲取一個父元素
html代碼:
<div>
<div class="div2">
<p>我是內容</p>
</div>
</div>
jQuery代碼:
var $div=$("p").parent();//返回class為div2的div元素
7、parents():獲取所有匹配的一個祖先元素
html代碼:
<div>
<div class="div2">
<p>我是內容</p>
</div>
</div>
jQuery代碼:
var $div=$("p").parents();//返回兩個div元素組成的數組
10、元素定位###
1、offset():獲取元素在當前視窗的相對偏移,返回一個對象,對象包含top和left兩個屬性
html代碼:
<div>
我是內容
</div>
jQuery代碼:
var $offset=$("div").offset();
var left=$offset.left;
var top=$offset.top;
2、position():獲取元素相對于最近的一個position樣式屬性設置為relative或者absolute的祖父節點的相對偏移,返回一個對象,對象包含top和left兩個屬性
html代碼:
<div style="position:relative">
<div><p>我是內容</p></div>
</div>
jQuery代碼:
var $position=$("p").position();
var left=$position.left;
var top=$position.top;
3、scrollTop():獲取元素的滾動條距離頂端的距離
4、scrollLeft():獲取元素的滾動條距離左側的距離
第三章 事件與動畫##
1、加載DOM###
(docuemnt).ready()在DOM完全就緒時就可以被調用,此時并不意味著這些關聯文件都已經下載完畢;另外,
().ready();
2、事件綁定###
bind():可以有三個參數,第一個參數是事件類型,第二個參數可選,作為event.data屬性值傳給事件對象的額外數據對象,第三個參數是處理函數
bind(type data fn);
常見的事件類型:
blur、focus、load、resize、scroll、unload、click、dbclick、mousedown、mouseup、mouseover、
mousemove、mouseout、mouseenter、mouseleave、change、select、submit、keydown、keyup、error
另外,像click、mouseover、mouseout這類常用的事件,可以簡寫,如下:
$(function(){
$("h1").mouseover(function(){
$(this).next().show()
}).mouseout(function(){
$(this).next().hide()
})
})
3、合成事件###
jQuery中有兩個合成事件——hover()和toggle()方法
1、hover():用于模擬光標懸停事件,語法
hover(enter,leave);
當光標移動到元素時,會觸發第一個函數,離開時觸發第二個函數
2、toggle():用于模擬鼠標連續點擊事件,語法
toggle(fn1,fn2,……,fn);
4、阻止事件之外的額外問題##
1、停止事件冒泡
用stopPropagation()方法來停止事件冒泡,如:
$("span").bind("click",function(event){
//事件處理程序
event.stopPropagation()
})
2、阻止默認行為
用preventDafault()方法來阻止默認行為,當然也可以用原生JavaScript中的return false如:
$(a").bind("click",function(event){
//事件處理程序
event.preventDafault();
//或者return false;
})
3、事件捕獲
事件捕獲與事件冒泡是剛好兩個相反的過程,jQuery不支持事件捕獲。
5、事件對象##
添加事件對象非常簡單,只需要為函數添加一個參數,一般會用event
$(a").bind("click",function(event){
//事件處理程序
})
1、事件對象的屬性
(1)event.type:獲取事件的類型
$(a").bind("click",function(event){
alert(event.type);
})
(2)event.target:獲取觸發事件的對象元素
$(a").bind("click",function(event){
alert(event.target.href);
})
(3)event.pageX和event.pageY:獲取光標相對于頁面的x坐標和y坐標
$(a").bind("click",function(event){
alert(event.pageX);
alert(event.pageY);
})
(4)event.which:在鼠標單擊時獲取到鼠標的左、中、右鍵;在鍵盤事件中獲取到鍵盤的按鍵
$(a").mousedown(function(event){
alert(event.which);
})
$(a").keyup(function(event){
alert(event.which);
})
(5)event.metaKey:在鍵盤事件中獲取ctrl按鍵
2、事件對象的方法
(1)event.preventDefault():阻止默認事件
(2)event.stopPropagation():阻止事件冒泡
6、移除事件##
unbind():沒有參數時,刪除所有的綁定事件,可以有兩個參數,第一個參數是事件類型,第二個參數是將要移除的函數,提供了事件類型,則只刪除該事件類型,提供了事件處理函數,則只有這個事件處理函數會被刪除,語法結構如下
unbind(type,data)
$("a").click(function(){
$("#btn").unbind("click",fn1);
}
另外,對于只需要觸發一次隨后就立即解除綁定的情況,jQuery提供了一種簡寫方法——one()方法,這個方法可以為元素綁定處理函數,當函數觸發一次后,立即被刪除;
7、事件的其他用法##
1、模擬操作
trigger():此方法可以模擬操作,例如
$("#btn").triggle("click");
這段代碼可以觸發id為btn的按鈕的click事件
trigger()方法會觸發瀏覽器的默認事件,如果不想執行瀏覽器的默認操作,可以使用jQuery中的另一個方法triggerHandler()方法
2、綁定多個事件類型
bind可以為元素綁定多個事件類型
$(function(){
$("div").bind("mouseover mouseout",function(){
$(this).toggleClass("over");});
})
這段代碼效果和下方代碼一樣
$(function(){
$("div").bind("mouseover",function(){
$(this).toggleClass("over");
}).bind("mouseout",function(){
$(this).toggleClass("over");
});
})
8、動畫##
1、show()和hide():這兩個是jQuery中的最基本的動畫,當這兩個方法不含參數時,效果類似于直接將元素的display屬性分別改為block和none,這兩個方法當有參數時,可以使元素慢慢顯示出來,速度關鍵字有slow、normal、fast,此外,還可以直接指定一個數字作為顯示的時間參數,單位為毫秒,其中slow的顯示時間為600毫秒,normal的顯示時間為400毫秒,fast的顯示時間為200毫秒,這兩個方法是同時改變元素的高度、寬度和不透明度
$("p").toggle(function(){
$(this).next().hide(600);
},function(){
$(this).next().show(600);
})
2、fadeIn()和fadeOut():這兩個函數只改變元素的不透明度,同樣可以有以上的速度參數
$("p").toggle(function(){
$(this).next().fadeOut();
},function(){
$(this).next().fadeIn(600);
})
3、slideUp()和slideDown():這兩個方法只改變元素的高度,slideDown()方法使元素由上到下延伸展示,而slideUp()方法使元素從下到上縮短隱藏,同樣有上述的時間參數
$("p").toggle(function(){
$(this).next().slideUp();
},function(){
$(this).next().slideDown(600);
})
4、toggle():切換元素的可見狀態,如果元素可見,則切換為隱藏,如果元素隱藏,則切換為可見,語法結構
toggle(speed,callback);
$(this).next().toggle();
效果和hide()和show()方法類似
5、slideToggle():通過高度來切換元素的可見性,語法結構
slideToggle(speed,easing,callback);
6、fadeTo():把元素的不透明度以漸進的方式調整到指定的值,這個動畫只調整元素的不透明度,語法結構
fadeTo(speed,opacity,callback)
$(this).fadeTo(100,0.3);
7、fadeToggle():通過不透明度來切換元素的可見性,語法結構
fadeToggle(speed,easing,callback);
8、animate():自定義動畫,語法結構
animate(params,speed,callback);
params:一個包含樣式屬性及值的映射,如:{left:"400px",height:"500px"}
speed:速度參數,可選
callback:在動畫完成后執行的函數,可選
另外animate可以添加累加與累減動畫,如:
$(function(){
$("p").click(function(){
$(this).animate({left:"+=500px"},300)
});
});
利用animate中的第一個參數很容易實現同時執行多個動畫的效果,而需要按順序執行動畫,只需要順序寫animate動畫即可,另外也可以使用鏈式操作
$(this).animate({left:"500px"},300);
$(this).animate({height:"500px"},300);
等效于
$(this).animate({left:"500px"},300).animate({height:"500px"},300);
9、判斷元素是否處于動畫狀態
if(!$("p").is(":animated")){
//沒有處于動畫狀態時執行的程序
}
10、延遲動畫
延遲動畫利用delay()方法
$(this).animate({left:"500px"},200).delay(1000);
最后是一個廣告貼,最近新開了一個分享技術的公眾號,歡迎大家關注??