jQuery - 通用方法
迭代工具
.each()
如果想要逐一查用 jQuery 物件中所有的元素,可以呼叫 each()方法,而不用撰寫 for 迴圈,$().each() 是 jQuery 的 for 迴圈。each()類似 ECMAScript 5 的 forEach()陣列方法。預期一個回呼函式作為唯一的引數,並為 jQuery 物件中每個元素呼叫一次那個 callback 函式(以文件順序)。
jQuery 的 each()方法有個特色與 JavaScript 的 forEach()相當不同:只要 callback 對任何一個元素回傳 false,迭代動作就會止於那個元素(這就像是在正常的迴圈中使用 break 關鍵字)。
each() 會依選擇對象,逐一去執行程式,以迴圈繞行符合選擇器的每一個元素,就像組裝線上的機器一個接著一個的處理元素,當函式放在 each() 裡頭時,程式碼增添強大的威力,該函式隨著 each() 處理每個元素的同時對該元素做某事,在 function(index)的第一參數索引值,追蹤紀錄該函式正在處理那個元素編號,第二參數為 html 元素,而不是 jQuery 物件。另外,請注意函式裡面 this 的使用。
$(selector).each(function(index,element){…})
$('span').each(function (index, element) { |
$().each() 與 $.each(object, callback) 並不相同。
$.each()
可以對 jQuery 物件或 JS 任何物件進行迭代。
const obj = { |
.map()
jQuery 方法 map() 運作的方式很像 Array.map() 方法,它接受一個 callback 函式作為它的引數,並為 jQuery 物件中的每一個元素呼叫一次這個函式,收集這些呼叫傳回的值,return 一個新的 jQuery 物件,它包含一個陣列,可以呼叫 .get() 去取得。如果 callback 函式回傳 null 或 undefined,這個值會被忽略,該次呼叫不會有任何東西被加到新的 jQuery 物件中。
$(selector).map(function(index,element){})
const map = $('#menu li').map(function (index, elem) { |
如果要處理一般陣列或 JS 物件,請改用 $.map(),與 .map() 不同喔。
$.map()
將陣列或物件中的所有項目轉換為新的項目陣列。
$.map( array, callback )
$.map( object, callback )
const newOne = $.map([0, 1, 2], function (n) { |
const dimensions = { width: 10, height: 15, length: 20 } |
.get()
可以將 jQuery 物件轉成一般陣列。
$('#menu li').get() // 一般陣列 |
$.makeArray()
將類陣列轉換為真正的 JavaScript 陣列。
$.makeArray(obj)
$.makeArray($('#menu li')) |
// 物件 |
$.trim()
刪除字符串開頭和結尾的空格。
let str = ' Hello World ' |
$.contains()
檢查一個 DOM 元素是否是另一個 DOM 元素的後代。
$.contains(document.documentElement, document.body) // true |
$.data()
存儲與指定元素關聯的任意資料和/或返回設置的值。
$.data( element, key, value )
$.data( element, key )
$.data(document.body, 'foo', 52) |
$.merge()
將兩個數組的內容合併到第一個數組中。
$.merge( first, second )
$.merge([0, 1, 2], [2, 3, 4]) // [ 0, 1, 2, 2, 3, 4 ] |
$.extend()
將兩個或多個物件的內容合併到第一個物件中。
$.extend( target, object1 [, objectN ] )
$.extend( [deep ], target, object1 [, objectN ] )
// 淺拷貝 |
$.fn.extend()
將物件的內容合併到 jQuery 原型上以提供新的 jQuery 實體方法。
// 替 jQuery 物件新增方法 |
$.grep()
查找滿足過濾器函數的陣列元素。原陣列不受影響。
$.grep( array, function(element,index){…}, invert )
// [1, 2] |
.index()
除了 each()、map()之外,另一個基本 jQuery 方法是 index()。這個方法預期一個 element 作為它的引數,然後回傳那個元素在 jQuery 物件中的索引(index),從 0 開始,或在找不到那個元素時回傳 -1。
index()
沒有傳入任何引數,index()會回傳 jQuery 物件第一個元素在其兄弟元素中的索引位置。
.index( element or jQuery )
傳入一個 element 或 jQuery 物件作為引數,index()會搜尋那個物件中的第一個元素的索引值。
.index( selector )
傳入一個字串,index()會把它作為一個 CSS 選擇器,並回傳 jQuery 物件中第一個符合的元素的索引值。
$.now()
棄用,請使用 Date.now() 替代,返回一個代表當前時間的數字。
$.now()
檢查工具
$.inArray()
在陣列中搜索指定值並返回其索引(如果未找到,則返回 -1)。
$.inArray( value, array [, fromIndex ] )
$.inArray('帥', ['我', '是', '大', '帥', '哥']) // 3 |
$.isArray()
確定參數是否為陣列。
$.isArray( obj )
$.isArray([]) |
$.isPlainObject()
檢查物件是否為普通物件(使用’{}’或’新物件’創建)
$.isPlainObject(object)
$.isPlainObject({}) // true |
$.isEmptyObject()
檢查物件是否為空(不包含可枚舉的屬性)。
$.isEmptyObject(object)
$.isEmptyObject({}) // true |
$.isFunction()
確定其參數是否可作為函數調用。
$.isFunction( value )
const foo = function () {} |
$.isNumeric()
$.isNumeric(value)
確定其參數是否表示 JavaScript 數字。
$.isNumeric(100) // true |
$.isWindow()
確定參數是否是一個 window。
$.isWindow(obj)
$.isWindow(window) // true |
$(this) 與 this
$(this)
指的是 DOM 元素的 jQuery 包裝集,可以使用 jQuery 指向當前動作的元素去執行程式,若要存取屬性須配合 jQuery 的方法。例如:
<script> |
this
指的是該 HTML DOM 元素物件,可直接存取屬性與值。例如:
this.id = 'one' |
請盡量使用 $(this),這樣還可以搭配 jQuery 的方法去遍歷走訪 DOM。
this 非常適合配合使用 each() 函式時,自然會需要存取每個元素的屬性。要在每一輪執行中存取目前的元素時,可使用稱為 this 的特殊關鍵字。
this 關鍵字指向呼叫不具名函式的元素。因此在 jQuery 自動迴圈第一輪中,this 指向 jQuery 選取結果的第一個元素,第二次就是第二個… 以此類推。
例子:將頁面連結在列表 #bibList 顯示
<script> |
$(this) 的奧妙之處
透過 this 可以讓各元素單獨執行其觸發的事件內容,此功能對於打造各種用於 Web 網站組件有很大的幫助。
$(function () { |
常被誤會的 jQuery 與 JavaScript
以下 value、val() 回傳的資料是 String,千萬不要以為$開頭就誤以為一直是 jQuery 的物件,經過每一層的運算回傳後,資料型態可能會被改變。
document.getElementById('demo1').value.substr(0, 1) //正確 |
以下 this 皆指向不同元素,
只有 this 表示是 DOM 的物件,因此可以使用 value 屬性。
$(this),把 this 放進 $() 函式則變成 jQuery 物件,因此可以使用
$('input').each(function () { |
index 不要搞混了
jQuery 的回呼函式第一參數都是 index,常常會與 JavaScript 的回呼函式搞混,例如 jQuery 的 .each() 與 JavaScript 的 .forEach()。
// jQuery |
jQuery 物件轉成真正陣列
如果需要將一個 jQuery 物件轉為真正的陣列,可呼叫 toArray()方法,將 jQuery 類陣列轉為陣列。除了 length 屬性,另外還有一個 jquery 屬性是所有 jQuery 物件所有的屬性,該屬性值可回傳 jQuery 版本號碼。
$().jquery // 回傳版本 |