本文首發於個人我的博客:cherryblog.site/
最近開啓了閱讀源碼之旅,有興趣的童靴能夠持續關注,這幾天再看 Zepto.js 的源碼,估計博文過幾天就會出來~另外,買的十幾本書陸陸續續的在看,立志每本書都寫一本讀書筆記(至關於這本書的濃縮版 + 我的看法)javascript
前一段在噹噹和京東上趁着打折買了十幾本編程的書,勵志要所有看完!在此立一個 flag,最近也是一直在讀書,發現書中更能深刻的學到系統的知識。而且若是再能將書中的內容用本身的語言表達出來那就更好了。php
書名:《鋒利的 jQuery》
推薦指數:☆☆☆css
簡介:這本書適合初學 JS 的童靴看~內容比較基礎,我是想看 JQ 源碼,而後發現和源碼沒有半毛錢關係,只是比較全的介紹 jQuery 的用法。對沒有系統看過 jQuery 用法的,或者 js 的初學者仍是有必定幫助的,可是若是你有必定的 js 基礎,仍是不要浪費時間了。其實 jQuery 好多的用法咱們並不清楚,只是將 jQuery 當作方便的元素選擇器來使用,其實 jQuery 能作的遠比這多得多。看完本篇文章,jQuery 的功能你就瞭解的差很少了。html
jQuery 只創建一個名爲 jQuery 的對象,其全部的函數方法都在這個對象之下。其別名 $
也能夠隨時交出控制權,絕對不會污染其餘變量。該特性使 jQuery 能夠與其餘 JavaScript 庫共存。java
jQuery 的鏈式操做方式:對放生在同一個 jQuery 對象上的一組動做,能夠直接連寫而無需重複獲取對象。jquery
當用 jQuery 找到帶有 「.myClass」 類的所有元素,而後隱藏它們時,無需循環遍歷每個返回的元素。jQuery 裏的方法都被設計成自動操做對象集合,而不是單獨的對象web
在 jQuery 庫中,$
就是 jQuery
的一個簡寫形式,例如 $(#.foo)
與 jQuery(#.foo)
是等價的ajax
window.onload
和 $(document).ready()
對比-- | window.onload |
$(document).ready() |
|
---|---|---|---|
執行時間 | 必須等待網頁中全部的內容加載完畢()包括圖片才執行 | 只須要 DOM 加載完就執行(不包括圖片等) | |
編寫個數 | 不能同時編寫多個 | 能同時編寫多個 | |
簡化寫法 | 無 | $(document).ready(function(){}) 能夠簡寫成 $(function(){}) |
jQuery 的鏈式操做方式:對放生在同一個 jQuery 對象上的一組動做,能夠直接連寫而無需重複獲取對象。
例如:編程
$(this).addClass("current").next().show().parent().siblings().children("a").removeClass("current").next().hide();複製代碼
爲了閱讀方便,也能夠將代碼改成以下格式:json
$(this).addClass("current") // 給當前元素添加 "current" 樣式
.next().show() // 下一個元素顯示
.parent().siblings().children("a").removeClass("current") // 父元素的同輩元素的子元素 <a> 移除 "current" 樣式
.next().hide(); // 他們的下一個元素隱藏複製代碼
DOM 對象就是 DOM 樹種的節點,經過原生 JavaScript 的 getElementsByTagName
或者 getElementsByTagId
等獲取,DOM 對象可使用 JavaScript 中的方法。
jQuery 對象是經過 jQuery 包裝 DOM 事後的對象。
在 jQuery 對象上沒法使用 DOM 對象的任何方法,同理,也不能在 DOM 對象上使用任何 jQuery 的方法啊。因此咱們要區分什麼是 jQuery 的方法,什麼是 JS 原生的方法。例如,下面這些都是錯誤的
$("#id").innerHTML
$("#id").checked
document.getElementById("id").html()複製代碼
爲了能更好的區分哪些是 jQuery 哪些是 DOM 對象,咱們約定俗成使用 jQuery 獲取的對象咱們在變量前面加上 $
符號。
[index]
方法,就是在 jQuery 對象後面加上索引,好比:var $cr = $(#cr); // jQuery 對象
var cr = $cr[0]; // 將 jQuery 轉化爲 DOM 對象
alert( cr.checked ); // 檢查是否轉化成功複製代碼
get(index)
方法var $cr = $(#cr); // jQuery 對象
var cr = $cr.get(0); // 將 jQuery 轉化爲 DOM 對象
alert( cr.checked ); // 檢查是否轉化成功複製代碼
$()
將 DOM 對象包裝起來就好。var cr = document.getElmentByID("cr"); // DOM 對象
var $cr = $(cr) // 將 DOM 對象轉爲 jQuery 對象複製代碼
以前遇到過相似的問題,是使用的插件須要較低版本的 jQuery(由於不進行維護了),而後和項目中使用的較高版本的 jQuery 不兼容,因此在網上查到了一個項目中是可使用兩個不一樣版本的 jQuery 的。
在 jQuery 庫中,幾乎全部的插件都被限制在它的命名空間裏。一般,全局對象都被很好地儲存在 jQuery 的命名空間裏。所以和其餘庫一塊兒使用時,不會引發衝突。
默認狀況下,jQuery 用 $ 做爲自身的快捷方式。
在其餘庫和 jQuery 庫都被加載完畢後,能夠在任什麼時候候調用 jQuery.noConflict()
函來將變量 $
的控制權移交給其餘 JavaScript 庫。
// 引入 其餘 JS 庫
// 引入 jQuery
<script>
jQuery.noConflict(); // 將變量 $ 的控制權移交給其餘 JS 庫
jQuery(function(){
jQuery("p").click(function){
alert( jQuery(this).text() );
}
})
</script>複製代碼
也能夠自定義一個快捷方式:
// 引入 其餘 JS 庫
// 引入 jQuery
<script>
$j.noConflict(); // 將變量 $ 的控制權移交給其餘 JS 庫
$j(function(){
$j("p").click(function){
alert( $j(this).text() );
}
})
</script>複製代碼
若是你還想繼續使用 $
而無論其餘函數的 $()
方法,同時又不想與其餘庫衝突,那麼你能夠
jQuery.noConflict(); // 將變量 $ 的控制權移交給其餘 JS 庫
(function( $ ){ // 定義匿名函數並設置形參 $
$("p").click(function){
alert( $(this).text() );
};
}(jQuery)); // 執行匿名函數並設置形參 jQuery複製代碼
若是 jQuery 庫在其餘庫以前導入,那麼就能夠直接使用「jQuery」來作一些 jQuery 的工做,同時可使用 $()
方法做爲其餘庫的快捷方式(也就是說不須要寫 jQuery.noConflict();
)
選擇器 | 描述 | 返回 |
---|---|---|
#id | 根據給定的 ID 匹配一個元素 | 單個元素 |
.class | 根據給定的類名匹配一個元素 | 集合元素 |
element | 根據給定的元素名匹配一個元素(至關於 tagName ) | 集合元素 |
* | 匹配全部元素 | 集合元素 |
select1,select2,select3 | 將每個選擇器匹配到的元素合併後一塊兒返回 | 集合元素 |
選擇器 | 描述 | 返回 |
---|---|---|
ancestor descendant(空格) | 選取 ancestor 元素裏全部的 descendant(後代)元素 | 集合元素 |
parent > child | 選取子元素 | 集合元素 |
prev + next | 選取緊接在 prev 元素後面的 next 元素 | 集合元素 |
prev + siblings | 選取 prev 元素以後的全部 siblings 元素 | 集合元素 |
選擇器 | 描述 | 返回 |
---|---|---|
:first | 選取第一個元素 | 單個元素 |
:last | 選取最後一個元素 | 單個元素 |
:not(selector) | 去除全部與給定選擇器匹配的元素 | 集合元素 |
:even | 索引爲偶數(索引從 0 開始) | 集合元素 |
:odd | 索引爲奇數(索引從 0 開始) | 集合元素 |
:eq(index) | 索引等於 index 的元素(index 從 0 開始) | 單個元素 |
:gt(index) | 索引大於 index | 集合元素 |
:lt(index) | 索引小於 index | 集合元素 |
:header(index) | 全部的標題元素 h一、h二、h3 等 | 集合元素 |
:animated | 正在執行動畫的全部元素 | 集合元素 |
:focus | 當前獲取焦點的元素 | 集合元素 |
選擇器 | 描述 | 返回 |
---|---|---|
:contains(text) | 文本中含有 「text」 的元素 | 集合元素 |
:empty | 不包含子元素或者文本的空元素 | 集合元素 |
:has(selector) | 含有選擇器所匹配的元素 | 集合元素 |
:parent | 含有子元素或文本 | 集合元素 |
:hidden | 選取全部不可見的元素 | 集合元素 |
:visible | 選取全部可見的元素 | 集合元素 |
選擇器 | 描述 | 返回 | 示例 | |
---|---|---|---|---|
[attribute] | 擁有此屬性的元素 | 集合元素 | $("div[id]") 選擇全部擁有 id 屬性的 div |
|
[attribute=value] | 屬性的值爲 value 的元素 | 集合元素 | $("div[tittle = test]") 屬性 title 爲 test 的 div |
|
[attribute!=value] | 屬性的值不爲 value 的元素 | 集合元素 | $("div[tittle != test]") 屬性 title 不爲 test 的 div |
|
[attribute^=value] | 屬性的值以 value 開始的元素 | 集合元素 | $("div[tittle^ = test]") 屬性 title 以 test 開始的 div |
|
[attribute$=value] | 屬性的值爲 value 結束的元素 | 集合元素 | ||
[attribute*=value] | 屬性的值含有 value 的元素 | 集合元素 | ||
[attribute\ | =value] | 屬性的值等於或者以該字符串爲前綴(該字符後跟 - 字符)的元素 value 的元素 |
集合元素 | |
[attribute~=value] | 屬性的用空格分隔的值中包含一個給定的 value | 集合元素 | ||
[attribute][attrubute][attribute] | 用屬性選擇器合併成一個複合屬性選擇器,知足多個條件,每選擇一次,縮小一次範圍 | 集合元素 |
選擇器 | 描述 | 返回 |
---|---|---|
:nth-child(index/even/odd/equation) | 選取每一個父元素下的第 index 個子元素或者奇偶元素(index 從 1 開始) | 集合元素 |
:first-child | 選取每一個父元素第一個子元素 | 集合元素 |
:last-child | 選取每一個父元素最後一個子元素 | 集合元素 |
:only-child | 若是某個元素是它父元素中惟一的子元素,則會被匹配 | 集合元素 |
選擇器 | 描述 | 返回 |
---|---|---|
:enabled | 選取全部可用元素 | 集合元素 |
:disable | 選取全部不可用元素 | 集合元素 |
:checked | 選取全部被選中元素(複選框、單選框) | 集合元素 |
:selected | 選取全部被選中元素(下拉列表) | 集合元素 |
選擇器 | 描述 | 返回 |
---|---|---|
:input | 選取全部的 <input> <textarea> <select> <button> |
集合元素 |
:text | 選擇全部單行文本框 | 集合元素 |
:password | 選擇全部的密碼框 | 集合元素 |
:radio | 選擇全部的單選框 | 集合元素 |
:checkout | 選擇全部的多選框 | 集合元素 |
:submit | 選擇全部的提交按鈕 | 集合元素 |
:image | 選擇全部的圖像按鈕 | 集合元素 |
:reset | 選擇全部的重置按鈕 | 集合元素 |
:button | 選擇全部的按鈕 | 集合元素 |
:file | 選擇全部的上傳域 | 集合元素 |
:hidden | 選擇全部的不可見元素 | 集合元素 |
$(#ID)
或者其餘選擇器獲取的永遠是對象,即便網頁上沒有此元素。使用 jQuery 檢查某個元素是否存在要不能使用 if( $(#tt) ){
dosomething
}複製代碼
而是根據元素是否有長度判斷:
if( $(#tt).length > 0 ){
dosomething
}複製代碼
或者轉化爲 DOM 元素來判斷
if( $(#tt)[0] ){
dosomething
}複製代碼
方法 | 描述 | 示例 |
---|---|---|
append() | 向每一個匹配的元素內部追加內容 | $(A).append(B) 將 B 追加到 A 中 |
appendTo() | 將全部匹配的元素追加到指定元素中 | $(B).appendTo(A) 將 B 追加到 A 中 |
prepend() | 向每一個匹配的元素內部前置內容 | |
after() | 在每一個匹配的元素以後插入內容 | $(A).after(B) 將 B 插入到 A 後面 |
insertAfter() | 將全部匹配的元素插入到指定元素的後面 | $(B).insert After(A) 將 B 插入到 A 後 |
before() | 在每一個匹配的元素以前插入內容 | $(A).before(B) 將 B 插入在 A 的前面 |
insertBefore() | 將全部匹配的元素插入到指定元素的前面 | $(B).insertBefore(A) 將 B 插入在 A 的前面 |
從 DOM 中刪除全部匹配的元素,傳入的參數用於根據 jQuery 表達式來刪選元素
$("ul li:eq(1)").remove(); // 獲取第二個 <li> 元素節點後,將它從網頁中刪除
$li.appendTo("ul"); // 把剛纔刪除的元素添加到 <ul> 元素中複製代碼
這個方法的返回值是一個指向已被刪除的節點的引用,所以能夠將其保存在一個變量中,之後還可使用。
detach() 和 delete() 同樣,也是從 DOM 中去掉全部匹配的元素,可是二者的區別是,這個方法不會把匹配的元素從 jQuery 對象中刪除,去掉的元素的全部綁定的事件、附加的數據等都會保留下來。
清空元素中全部的後代節點。注意是清空元素內的全部節點,並不清除選中的元素
複製節點可使用 clone()
方法
$("ul li").click(function(){
$(this).clone().appendTo("ul");
})複製代碼
可是這樣複製的節點,被複制的新元素並不具備任何行爲,若是須要新元素也具備相同的行爲,那麼就須要在 clone()
方法中傳入參數 true
$("ul li").click(function(){
$(this).clone(true).appendTo("ul");
})複製代碼
方法名 | 描述 |
---|---|
replaceWith() | 將全部匹配的元素都替換成 HTML 或者 DOM 元素,綁定的事件將會消失 |
replaceAll() | 和 replaceWith() 相反 |
wrap() | 將全部的元素單獨包裹 |
wrapAll() | 將全部匹配的元素用一個元素來包裹 若是被包裹的元素中間有其餘的元素,那麼其餘的元素會被放到包裹元素以後 |
wrapInner() | 將每個匹配的元素的字內容(包括文本節點)用其餘結構化的標記包裹起來 |
attr() | 獲取和設置元素屬性,傳遞一個參數爲獲取元素屬性,傳遞兩個參數爲設置元素屬性 |
removeAttr() | 刪除文檔中某個元素的特定屬性 |
addClass() | 追加樣式 |
removeClass() | 移除樣式 若是參數爲空,則清空該元素的全部 class |
toggleClass() | 切換樣式 若是類名存在則刪除,若是類名不存在則添加 |
hasClass() | 是否含有某個樣式,返回布爾值 |
html() | 讀取或者設置某個元素中的 HTML 內容 傳遞一個參數爲獲取 HTML 中的內容,傳遞兩個參數爲設置 HTML 的內容 |
text() | 讀取或者設置某個元素中的文本內容 傳遞一個參數爲獲取文本內容,傳遞兩個參數爲設置文本內容 |
val() | 讀取或設置元素的值 在用於表單元素時,能夠設置相應的元素被選中 |
children() | 得到匹配元素的子元素的集合 (子元素非後代元素) |
next() | 得到匹配元素後面緊鄰的同輩元素 |
prev() | 得到匹配元素前面緊鄰的同輩元素 |
siblings() | 得到匹配元素先後面緊鄰的同輩元 |
closest() | 取得最近的匹配元素 |
parent() | 得到集合中每一個元素的父級元素 |
parents() | 得到集合中每一個元素的祖先元素 |
closest() | 從元素自己開始,逐級向上級元素匹配,並返回最早匹配的祖先元素 |
方法 | 描述 |
---|---|
css() | 讀取和設置 style 對象的各類屬性(若是值是數字,將會自動轉化爲像素值,樣式名不帶 |
「」樣式使用駝峯寫法)
offset() | 獲取元素在當前視窗的相對偏移,返回的對象包含兩個屬性 top
、left
position() | 獲取元素相對於最近一個 position 樣式屬性設置爲 relation 或者 absolute 的父節點的相對偏移
scrollTop() 、scrollLeft() | 獲取元素滾動條距離頂端的距離和距離左側的距離
bind(type [, date ], fn )複製代碼
blur
focus
load
resize
scroll
unload
cliock
dblclick
mousedown
mouseup
mouseover
mouseout
mouseenter
mouseleave
change
select
submit
keyup
keydown
keypress
keyup
error
event.data
屬性值傳遞給事件對象的額外數據對象jQuery 的事件處理函數比 JS 原生的事件處理函數少了個 on
像 click
mouseover
mouseout
這類事件,能夠直接簡寫
jQuery 中有兩個合成事件,hover()
toggle()
hover(enter,leave)複製代碼
hover(fn1,fn2,...fnN)
方法用於模擬光標懸停事件,當光標移動到元素上時,會觸發第一個函數(enter),當光標移出這個元素時會觸發第二個函數(leave)
toggle() 方法用於模擬鼠標的連續點擊事件,第一次單擊元素,觸發第一個函數,第二次單擊同一個元素,會觸發第二個函數,若是有更多的函數,則依次觸發,直到最後一個。
假設網頁上有兩個元素,其中一個嵌套在另外一個元素裏面,而且都被綁定了 click 事件。同時 <body>
元素上也綁定了 click 事件,這樣的話,點擊最內層的元素,會觸發三次 click 事件。這是由於 JavaScript 的事件冒泡機制。
在 jQuery 中,提供了 stopPropagation()
方法來中止冒泡。
網頁中有本身的默認行爲,例如單擊超連接會跳轉,單擊「提交」按鈕後表單會提交,有時須要阻止默認行爲。
jQuery 提供了 preventDefault()
方法來阻止元素的默認行爲。
方法名稱 | 描述 |
---|---|
event.type | 獲取到事件的類型 |
event.preventDefault() | 阻止默認的事件行爲 |
stopPropagation() | 阻止事件冒泡 |
event.tagent() | 獲取到觸發事件的元素 |
event.relatedTarget() | mousover 和 mouseout 所發生的元素 |
event.pageX event.pageY | 獲取到光標相對於頁面的 x 座標和 y 座標 |
event.which() | 鼠標單擊事件中獲取到的左、中、右鍵,在鍵盤事件中獲取鍵盤的按鍵 |
event.metaKey() | 爲鍵盤事件獲取 ctrl 鍵 |
unbind([type],[data])複製代碼
第一個參數是事件類型,第二個參數是要移除的函數。
若是沒有參數,則刪除全部的綁定事件
對於只要觸發一次,隨後要當即解除綁定的狀況,jQuery 提供了 one()
方法。
當處理函數觸發一次後,當即被刪除。
trigger() 方法完成模擬操做,
trigger(type,[data])複製代碼
第一個參數是要觸發的事件類型,第二個參數是要傳遞給事件處理函數的附加參數,能夠經過傳遞的參數來區分此次事件是代碼觸發仍是用戶觸發的
方法名 | 說明 |
---|---|
hide() show() | 同時修改多個樣式屬性,即高度、寬度和不透明度 |
fadeIn() fadeOut() | 只改變不透明度 |
slideUp() slideDown() | 只改變高度 |
toggle() | 用來代替 hide() 和 show() 方法 |
slideToggle() | 用來代替 slideUp() 和 slideDown() |
fadeToggle() | 用來代替 fadeIn() 和 fadeOut() |
animate() | 屬於自定義動畫的方法 |
jQuery 中的任何動畫效果,均可以指定三種速度參數,slow
、normal
、fast
,對應的時間長度分別是 0.6 秒,0.4 秒和 0.2 秒,也能夠傳入參數,傳入數字做爲參數不須要加引號,使用關鍵字須要加引號。
當一個 animate()
方法中應用多個屬性時,動畫是同時發生的。
當以鏈式方法調用時,動畫是按順序發生(除非 queue
選項爲 false
)。
默認狀況下,動畫都是同時發生的。
當以回調的形式應用動畫方式時,按照回調順序發生。
stop([clearQueue,gotoEnd])複製代碼
clearQueue
是否要清空未執行的動畫隊列gotoEnd
是否直接跳轉到末狀態
要始終避免動畫累計而致使的動畫與用戶行爲不同的狀況。當用戶快速在某個元素上執行 animate()
時,就會出現動畫累加。
解決方法是判斷元素是否處於動畫狀態,若是用戶不處於動畫狀態,才爲元素添加新的動畫,不然不添加。
在動畫執行的過程當中,若是想對動畫進行延遲操做,那麼可使用 delay()
方法。
定義一個函數,經過該函數來獲取異步信息
function Ajax(){ // 定義一個函數,經過該函數來獲取異步信息
}複製代碼
var xmlHttpReq = null; // 聲明一個空對象來裝入 XMLHttpRequest 對象複製代碼
if(window.XMLHttpRequest){
xmlHttpReq = new XMLHttpRequest(); // 實例化一個 XMLHttpRequest 對象
}複製代碼
open()
方法初始化 XMLHttpRequest 對象,指定 HTTP 方法和要使用的服務器 URL;xmlHttpReq.open("GET","test.php",true); // 調用 open() 方法並採用異步方式複製代碼
onreadystatechange
屬性來註冊該回調事件處理器,當 readystatus 狀態改變時,會激發 onreadystatechange 事件而後調用回調函數。xmlHttpReq.onreadystatechange = RequestCallBack;複製代碼
xmlHttpReq.send(null);複製代碼
readyStatus == 4
)而且響應已經成功(HTTP 狀態值爲 200),就能夠處理響應內容;function RequestCallBack() {
if(xmlHttpReq.readyState == 4){
if(xmlHttpReq.status == 200){
document.getElementById("resText").innerHTML = xmlHttpReq.responseText;
}
}
}複製代碼
jQuery 對 Ajax 操做進行封裝,在 jQuery 中,$.ajax()
是最底層的方法,第二層是 load()
、$.get()
、$.post()
、$.grtJSON()
。
load( url [,data] [,callback])複製代碼
參數列表 | 類型 | 說明 |
---|---|---|
url | String | 請求 HTML 頁面的 URL 地址 |
data | Object | 發送至服務器的 key/value 數據 |
callback | Function | 請求完成時的回調函數,不管請求失敗或成功 |
好比說咱們要將一個頁面追加到另外一個頁面,被追加的文件爲 inner.html
,內容以下
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<p>測試</p>
</body>
</html>複製代碼
內容只有一個 <p>
標籤,而後咱們建立另外一個頁面,用來觸發 Ajax 事件,並用來顯示追加的 HTML,頁面內容以下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="../jQuery.min.js"></script>
</head>
<body>
<input type="button" id="send" value="獲取">
<div id="resText"></div>
<script> $(function () { $('#send').click(function () { $('#resText').load('inner.html') }) }) </script>
</body>
</html>複製代碼
當,點擊按鈕時,頁面以下:
當前咱們也可能載入部分的 HTML 文檔,例如只須要載入 inner.html
中的 test
類,那麼:
$('#resText').load('inner.html .test')複製代碼
POST
方式。$('#resText').load('inner.html .test', functiong(responseText,textStatus,XMLHttpRequest){
// responseText : 請求返回的內容
// textStatus : success、error、notmodified、timeout
// XMLHttpRequest : XMLHttpRequest 對象
})複製代碼
$.get()
方法$.get()
方法使用 GET 方式來進行異步請求
$.get( url [, data] [, callback] [, type])複製代碼
參數名稱 | 類型 | 說明 |
---|---|---|
url | String | 請求 HTML 頁的 URL 地址 |
data(可選) | Object | 發送至服務器的 key/value 數據會做爲 QueryString 附加到請求 URL 中 |
callback(可選) | Function | 載入成功時回調函數(只有當 Reaponse 的返回狀態是 success 才調用)自動將請求的結果和狀態傳遞給方法 |
type(可選) | String | 服務器端返回內容的格式,包括 xml、html、script、json、text、_default |
$.post()
方法$.post()
方法使用 GET 方式來進行異步請求
$.post( url [, data] [, callback] [, type])複製代碼
$.ajax() 方法是 jQuery 最底層的 Ajax 實現,
$.ajax(option)複製代碼
參數名稱 | 類型 | 說明 |
---|---|---|
url | String | 發送請求的 URL(默認爲當前頁面) |
type | String | 請求方式,默認爲 GET |
timeout | Number | 設置請求超時時間(毫秒) |
data | Object 或 String | 發送到服務器的數據 |
dataTpye | String | 預期服務器返回的數據類型 |
beforeSend | Function | 發送請求前能夠修改 XMLHttpResponse 對象的函數 |
complete | Function | 請求完成後調用的回調函數(請求失敗或者成功均調用) |
success | Function | 請求成功後調用的回調函數 |
error | Function | 請求失敗後調用的回調函數 |
global | Function | 默認爲 true。是否觸發全局 Ajax 事件 |
serialize()
方法可以將 DOM 元素內容序列化爲字符串,用於 Ajax 請求。即便在表單中再增長字段,腳本仍然可以使用。而且不須要作其餘多餘工做。
serializeArray()
方法,該方法不是返回字符串,是將 DOM 序列化後,返回 JSON 格式的數據。
$.param()
方法,用來對一個數組或對象按照 key/value 進行序列化。
var obj = {a:1,b:2,c:3};
var k = $.param(obj);
alert(k); // 輸出 a=1&b=2&c=3複製代碼
document.getElementById()
,直接經過 id 返回對應的元素能夠有效的縮小你定位的 DOM 元素,建議從最近的 ID 元素開始往下搜索。咱們能夠將常常用的對象使用變量緩存起來,由於 jQuery 會在建立每個選擇器的過程當中,查找 DOM。
不要讓相同的選擇器在你的代碼中出現屢次。
在一些循環時,例如 for()
、while()
、$.each()
使用這些方法處理 DOM 元素時,要儘量的減小操做 DOM,可使用變量未來儲存元素,最後一次性將生產的 DOM 插入或者刪除。
使用 jQuery 選擇器得到的結果是一個 jQuery 對象,然而,jQuery 類庫會讓你感受你正在使用一個定義了索引和長度的數組。在性能方面,建議使用 for 或者 while 循環來處理,而不是 $.each()
每個 JavaScript 事件(例如:click、mouseover 等)都會冒泡到父節點,當咱們須要給多個元素調用同個函數時會頗有用。
好比,咱們要單擊表格的行使得改行背景顏色改變
$("myTable td").click(function(){
$(this).css("background",'red')
})複製代碼
若是你是這樣寫的話,那麼恭喜你,提供了一個錯誤的示例,🎉🎉。這樣的弊端是,假使總共有 100 個 td,那麼在使用以上方式的時候,你綁定了 100 個事件,天辣,是否是很恐怖。
正確的姿式是,只須要向他們的父節點綁定一次事件,而後經過 event.target
獲取到當前點擊的元素。
$("myTable").click(function(){
var $clicked = $(e.target); // 捕捉到觸發的目標元素
$clicked.css("background",'red');
})複製代碼
也能夠這樣寫
$("myTable td").on('click','td', function(){
$(this).css("background",'red')
})複製代碼