1. 程式人生 > >Jquery2 基礎核心

Jquery2 基礎核心

load 空間 沖突 () 全面 連續 第三方 匿名 java

學習要點:

  • 1.代碼風格
  • 2.加載模式
  • 3.對象互換
  • 4.多個庫之間的沖突

本節簡單的介紹一下jQuery 一些核心的問題。

一.代碼風格

在jQuery程序中,不管是頁面元素的選擇、內置的功能函數,都是美元符號“$”來起始的。而這個“$”就是jQuery當中最重要且獨有的對象:jQuery對象,所以我們在頁面元素選擇或執行功能函數的時候可以這麽寫:

$(function () {}); //執行一個匿名函數
$(‘#box’); //進行執行的ID元素選擇
$(‘#box’).css(‘color’, ‘red’); //執行功能函數

由於$本身就是jQuery對象的縮寫形式,那麽也就是說上面的三段代碼也可以寫成如下形式:

jQuery(function () {});
jQuery(‘#box’);
jQuery(‘#box’).css(‘color’, ‘red’);

在執行功能函數的時候,我們發現.css()這個功能函數並不是直接被“$”或jQuery對象調用執行的,而是先獲取元素後,返回某個對象再調用.css()這個功能函數。那麽也就是說,這個返回的對象其實也就是jQuery對象。

$().css(‘color’, ’red’); //理論上合法,但實際上缺少元素而報錯

值得一提的是,執行了.css()這個功能函數後,最終返回的還是jQuery對象,那麽也就是說,jQuery的代碼模式是采用的連綴方式,可以不停的連續調用功能函數。

$(‘#box‘).css(‘color‘, ‘red‘).css(‘font-size‘, ‘50px‘); //連綴

jQuery中代碼註釋和JavaScript是保持一致的,有兩種最常用的註釋:單行使用“//...”,多行使用“/* ... */”。

二.加載模式

我們在之前的代碼一直在使用$(function () {});這段代碼進行首尾包裹,那麽為什麽必須要包裹這段代碼呢?

原因是我們jQuery庫文件是在body元素之前加載的,我們必須等待所有的DOM元素加載後,延遲支持DOM操作,否則就無法獲取到。
在延遲等待加載,JavaScript提供了一個事件為load,方法如下:

window.onload = function
() {}; //JavaScript等待加載 $(document).ready(function () {}); //jQuery等待加載

load和ready區別

技術分享圖片

在實際應用中,我們都很少直接去使用window.onload,因為他需要等待圖片之類的大型元素加載完畢後才能執行JS代碼。所以,最頭疼的就是網速較慢的情況下,頁面已經全面展開,圖片還在緩慢加載,這時頁面上任何的JS交互功能全部處在假死狀態。

三.對象互換

jQuery 對象雖然是 jQuery 庫獨有的對象,但它也是通過 JavaScript 進行封裝而來的。可以直接輸出來得到它的信息。

alert($); //jQuery 對象方法內部
alert($()); //jQuery 對象返回的對象,還是 jQuery
alert($(‘#box‘)); //包裹 ID 元素返回對象,還是 jQuery

從上面三組代碼發現:只要使用了包裹後,最終返回的都是 jQuery 對象。這樣的好處顯而易見,就是可以連綴處理。但有時,我們也需要返回原生的 DOM 對象,比如:

alert(document.getElementById(‘box‘)); //[object HTMLDivElement]

jQuery 想要達到獲取原生的 DOM 對象,可以這麽處理:

alert($(‘#box‘).get(0)); //ID 元素的第一個原生 DOM

從上面 get(0),這裏的索引看出,jQuery 是可以進行批量處理 DOM 的,這樣可以在很多需要循環遍歷的處理上更加得心應手。

四.多個庫之間的沖突

當一個項目中引入多個第三方庫的時候,由於沒有命名空間的約束,庫與庫之間發生沖突在所難免。那麽,既然有沖突的問題,為什麽要使用多個庫呢?原因是 jQuery 只不過是 DOM 操作為主的庫,方便我們日常 Web 開發。但有時,我們的項目有更多特殊的功能需要引入其他的庫,比如用戶界面 UI 方面的庫,遊戲引擎方面的庫等等一系列。而很多庫,比如 prototype,都使用“$”作為基準起始符,如果想和 jQuery 共容有兩種方法:
1.將 jQuery 庫在 prototype 庫之前引入,那麽“$”的所有權就歸 Base 庫所有,而 jQuery 可以直接用 jQuery 對象調用,或者創建一個“$$”符給 jQuery 使用。

var $$ = jQuery; //創建一個$$的 jQuery 對象
$(function () { //這是 prototype 的$
  alert($(‘#box‘).ge(0)); //這是 prototype 的$
  alert($$(‘#box‘).width()); //這是 jQuery 的$$
});

2.如果將 jQuery 庫在 prototype 庫之後引入,那麽“$”的所有權就歸 jQuery 庫所有,而 prototype庫將會沖突而失去作用。這裏,jQuery 提供了一個方法:

jQuery.noConflict(); //將$符所有權剔除
var $$ = jQuery;
$(function () {
  alert($(‘#box‘).ge(0));
  alert($$(‘#box‘).width());
});

Jquery2 基礎核心