$(document).ready()
通常你想在DOM結(jié)構(gòu)加載完畢之后才執(zhí)行相關腳本启盛。使用原生JavaScript,你可能調(diào)用window.onload = function() { ... }, 但是這個辦法的你只能夠調(diào)用一次,而且需要等DOM結(jié)構(gòu)完全加載完畢僵闯,包括圖片樣式等靜態(tài)文件所有夾在完畢才會開始執(zhí)行onload函數(shù)里面的代碼卧抗。
jQuery中提供了一種更好的辦法:
$(document).ready(function() {
console.log('ready!');
});
與onload函數(shù)不同的是,這個辦法可以被調(diào)用無限多次鳖粟,而且不需要等待頁面元素完全下載完畢才執(zhí)行代碼社裆,即DOM結(jié)構(gòu)渲染完畢后馬上執(zhí)行代碼。
你可能見過一些經(jīng)驗豐富的開發(fā)者使用下面的簡寫形式:
$(function() {
console.log('ready!');
});
除了傳遞匿名函數(shù)向图,你也可以選擇傳遞命名函數(shù):
function readyFn(jQuery) {
//do something...
}
$(document).ready(readyFn);
//或者:
$(window).load(readyFn);
避免與其他庫沖突
1泳秀、No-Conflict模式
jQuery庫是被包含在jQuery
全局變量中的,而$
是jQuery
的快捷方式榄攀,也就是$
默認也是全局變量嗜傅。如果你在使用其他包含$
全局變量的庫(如prototype,YUI)檩赢,你可能面臨變量名沖突吕嘀,不過jQuery提供了避免這種沖突的辦法。
<script src="prototype.js"></script>
<script src="jquery.js"></script>
<script>
var $j = jQuery.noConflict();
//現(xiàn)在$不再是jQuery的別名贞瞒,$j替換了$成為了jQuery的新別名
$j(document).ready(function() {
$j('div').hide();
});
//現(xiàn)在$是prototype的別名
window.onload = function() {
var mainDiv = $('main');
};
</script>
上面的代碼中的$
會回復到它本身的庫的用途偶房。你依然可以通過jQuery
或者$j
的方式使用jQuery庫。你可以隨意更改jQuery
的別名军浆, 比如`jq', '$J', 'awesomeQuery'等棕洋。
另外,如果你不想給jQuery
命名新的別名(你依然想要用$
)瘾敢,你依然有辦法可以避免沖突拍冠。
<script src="prototype.js"></script>
<script src="jquery.js"></script>
<script>
jQuery.noConflict();
jQuery( document ).ready(function( $ ) {
//這個作用域里的$都是jQuery的別名
$('div').hide();
});
//全局作用域的$是prototype的
window.onload = function() {
var mainDiv = $('main');
};
</script>
這些技巧基本上可以完成日常需求了尿这。
2簇抵、 引入其他庫之前引入jQuery
在其他庫前引入jQuery,你需要使用jQuery來調(diào)用jQuery庫射众,$別稱屬于其他庫碟摆。
<script src="jquery.js"></script>
<script src="prototype.js"></script>
//通過jQuery全稱調(diào)用jQuery庫
jQuery(document).ready(function() {
jQuery('div').hide();
});
//由于prototype在jQuery之后引入,$別名屬于prototype
window.onload = function() {
var mainDiv = $('main');
};
3叨橱、 總結(jié)
創(chuàng)建新別名:
jQuery.noConflict()
方法做了兩件事典蜕,一是返回了jQuery對象的引用,你可以用來賦值給自定義的變量罗洗,如($jq)愉舔;二是,刪除了默認的$
別稱伙菜,把$
別名歸還給其他庫:
<script src="prototype.js"></script>
<script src="jquery.js"></script>
<script>
//將$別名歸還prototype轩缤,創(chuàng)建一個新的別名$jq
var $jq = jQuery.noConflict();
</script>
使用立即調(diào)用函數(shù)表達式:
你可以創(chuàng)建一個立即調(diào)用函數(shù)表達式,然后在表達式里使用$作為jQuery的別名:
<script src="prototype.js"></script>
<script src="jquery.js"></script>
<script>
jQuery.noConflict();
(function( $ ) {
$('div').remove();
})( jQuery );
</script>
注意,如果你使用這個技巧火的,你將不能夠在立即調(diào)用函數(shù)表達式里面使用$
作為prototype的別名壶愤。
給jQuery(document).ready()傳遞參數(shù):
<script src="jquery.js"></script>
<script src="prototype.js"></script>
<script>
jQuery(document).ready(function( $ ) {
//do something...
});
</script>
或者
<script src="jquery.js"></script>
<script src="prototype.js"></script>
<script>
jQuery(function( $ ) {
//do something...
});
</script>