jQuery 常用核心方法 .each() 遍歷一個jQuery對象,為每個匹配元素執行一個函數 $.extend() jQuery.extend([deep,] target [, object1 ] [, objectN ] )把多個對象進行合併,把所有的屬性添加到第一個對象上 當我們提供兩個或 ...
jQuery 常用核心方法
.each()
遍歷一個jQuery對象,為每個匹配元素執行一個函數
$('p').each(function(idx,node){
$(node).text(idx + ':' + 'hello')
})
$.extend()
jQuery.extend([deep,] target [, object1 ] [, objectN ] )
把多個對象進行合併,把所有的屬性添加到第一個對象上
-
當我們提供兩個或多個對象給$.extend(),對象的所有屬性都添加到目標對象(target參數)。
-
如果只有一個參數提供給$.extend(),這意味著目標參數被省略。在這種情況下,jQuery對象本身被預設為目標對象。這樣,我們可以在jQuery的命名空間下添加新的功能。這對於插件開發者希望向 jQuery 中添加新函數時是很有用的。即
{}
為預設屬性,用戶向裡面設置屬性,覆蓋掉預設的屬性,沒有設置的即使用預設屬性。
var object = $.extend({}, object1, object2)
var object1 = {
apple: 0,
banana: { weight: 52, price: 100 },
cherry: 97
}
var object2 = {
banana: { price: 200 },
durian: 100
}
// 將obj2合併到obj1上的案例
$.extend( object1, object2 )
.clone()
.clone()
方法深度複製所有匹配的元素集合,包括所有匹配元素、匹配元素的下級元素、文位元組點。
通常我們將頁面上一個元素插入到DOM里另一個地方,它會被從老地方移走,類似剪切的效果。
例如:
<div class="container">
<div class="hello">Hello</div>
<div class="world">World</div>
</div>
$('.hello').appendTo('.world');
<div class="container">
<div class="world">
World
<div class="hello">Hello</div>
</div>
</div>
如果需要的是複製而不是剪切,可以像下麵這樣寫代碼:
$('.hello').clone().appendTo('.world')
.index()
從給定集合中查找特定元素 index
下標
- 沒參數返回第一個元素
index
- 如果參數是 DOM對象 或者 jQuery對象 ,則返回參數在集合中的
index
- 如果參數是選擇器,返回第一個匹配元素
index
,沒有找到返回-1
$('p').eq(2).index() //2
$('.ok').index('div') //獲取div標簽中的.ok的下標
.ready()
相當於原生JS的document.onDOMContentLoaded
當DOM準備就緒時,指定一個函數來執行。
例如執行的代碼需要在元素被載入之後才能使用時,(例如,取得圖片的大小需要在圖片被載入完後才行),就需要將這樣的代碼放到 load 事件中。
下麵兩種寫法都是等同的
$(document).ready(function(){
})
$(function(){
})
示例
$(function(){
console.log('ready')
})
window.onload 和 $(document).ready
開發中我們經常需要給一些元素的事件綁定處理函數。但問題是,如果那個元素還沒有被載入到頁面上,但是綁定事件已經執行完了,是沒有效果的。這兩個事件大致就是用來避免這樣一種情況,將綁定的函數放在這兩個事件的回調中,保證能在頁面的某些元素載入完畢之後再綁定事件的函數。那window.onload
和 $(document).ready
有什麼區別?document.onDOMContentLoaded
呢?
window.onload 和 $(document).ready 有什麼區別?
- 執行時間不同
window.onload
必須等到頁面內包括圖片的所有元素載入完畢後才能執行。$(document).ready()
是 DOM結構 繪製完畢後就執行,不必等到所有頁面元素載入完畢。
- 兩個方法重覆執行的不同
window.onload
不能同時編寫多個,如果有多個window.onload
方法,只會執行最後一個$(document).ready()
可以同時編寫多個,並且都可以得到執行。
如果兩個方法都寫了,那麼$(document).ready()
是比window.onload
要先執行的。
- 簡化寫法
window.onload
沒有簡化寫法$(document).ready(function(){})
可以簡寫成$(function(){})
document.onDOMContentLoaded 呢?
document.onDOMContentLoaded
相當於 jQuery 當中的.ready()
。當初始的 HTML 文檔被完全載入和解析完成之後,DOMContentLoaded 事件被觸發,而無需等待樣式表、圖像和子框架的完成載入。
jQuery文檔介紹 中有一段解釋這兩個不是同一個功能
翻譯
ready()方法提供了一種方法,可以在頁面的DOM文檔對象模型變得可以安全操作時立即運行JavaScript代碼。這通常是在用戶查看或與頁面交互之前執行所需任務的好時機,例如添加事件處理程式和初始化插件。當通過對該方法的連續調用添加多個函數時,它們在DOM準備好並按照添加順序運行。在jQuery 3.0中,jQuery確保在一個處理程式中發生異常不會阻止隨後添加的處理程式執行。
大多數瀏覽器以 DOMContentLoaded 事件的形式提供了類似的功能。然而,jQuery的 .ready() 方法有一個重要而有用的不同之處:如果DOM準備好了,瀏覽器在代碼調用 .ready(handler) 之前就載入了 DOMContentLoaded ,那麼函數處理程式仍然會被執行。相反,在事件觸發後添加的DOMContentLoaded 事件偵聽器從未執行。
所以document.onDOMContentLoaded
並不等同於jQuery中的.ready()
,只能說是一種類似的方法。