JQuery

簡介

jQuery是開源軟體，使用MIT授權條款授權。 jQuery的語法設計使得許多操作變得容易，如操作文件（document）、選擇文件物件模型（DOM）元素、建立動畫效果、處理事件、以及開發Ajax程式。jQuery也提供了給開發人員在其上建立外掛程式的能力。這使開發人員可以對底層互動與動畫、進階效果和進階主題化的元件進行抽象化。模組化的方式使jQuery函式庫能夠建立功能強大的動態網頁以及網路應用程式。
微軟和諾基亞已宣布在他們的平台上繫結jQuery。微軟最初在Visual Studio中整合了jQuery以便在微軟自己的ASP.NET AJAX框架和ASP.NET MVC Framework中使用，而諾基亞則在他的Web執行時元件開發平台中整合了jQuery。MediaWiki自從1.16版本後也開始使用jQuery。
jQuery 1.3版以後，引入全新的層疊樣式表（CSS）選擇器引擎Sizzle。
同時不再提供Packed版本，因為解壓縮所消耗的時間，遠大於所節省的下載時間，且不利於除錯，且已有Google AJAX Libraries API等公開站台提供jQuery的js的參照服務，故Packed版本原本的優點已蕩然無存。

瀏覽器支援

jQuery 3.0及以後版本支援「目前−1版本」 的Firefox、Chrome、Safari、Edge（就是說目前穩定版本以及目前穩定版本之前的一個版本），另外還支援Internet Explorer 9以後的IE版本。在行動端支援iOS 7+和Android 4.0+。

載入jQuery

jQuery庫是包含所有公共DOM、事件、效果和Ajax函式的一個JavaScript檔案。可以通過連結到本地副本或公共伺服器提供的許多副本之一把jQuery包含在網頁中。jQuery有一個由MaxCDN代管的內容傳遞網路（CDN）。 Google和微軟也代管了jQuery。
<script src="jquery.js"></script>
也可以直接從CDN中載入jQuery：
<script
  src="https://code.jquery.com/jquery-3.3.1.min.js"
  integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8="
  crossorigin="anonymous"></script>

無衝突模式

jQuery還有.noConflict()模式，這會釋放對$的控制。如果其他的庫也使用$作為識別元的話，這個模式會比較有用。在無衝突模式下，開發人員可以使用jQuery替代$而不會缺失任何功能。

典型的程式碼開頭

通常，jQuery是通過將初始化程式碼和事件處理常式放入$(handler)中來使用的。當瀏覽器構建DOM並行送載入事件時觸發。
$(function () {
   // 这个匿名函数是页面加载时要调用的第一个函数。
   // jQuery代码，事件处理回调写在这里});
或者
$(fn); // 在其他地方定义的名为fn的函数，是页面加载时要调用的第一个函数。
或者我們也可以使用
$(document).ready(function(){
   // 这是页面加载时要调用的第一个函数。
   // jQuery代码，事件处理回调写在这里});
由於歷史原因，$(document).ready(callback)已經成為DOM就緒時執行程式碼的實質性標誌。但jQuery 3.0以後，鼓勵開發人員使用更簡短的$(handler)標誌。
對尚未載入的元素進行事件處理的回呼函式可以作為匿名函式在.ready()內部註冊。這些事件處理常式只會在觸發事件時被呼叫。例如，下面的程式碼添加了一個，用於在img圖像元素上單擊滑鼠事件的處理常式。
$(function () {
   $('img').on('click', function () {
      // 处理页面中任何img元素上的click事件
   });});

連結（Chaining）

jQuery命令通常返回一個jQuery物件，因此命令可以連結：
$('div.test')
  .add('p.quote')
  .addClass('blue')
  .slideDown('slow');
這行程式碼找到了所有class屬性為test的div標籤，以及所有class屬性為quote的p標籤的並集，對於所有符合的元素都增加一個blue的class屬性，並用一個動畫增加了它們的高度。函式$與add影響符合的元素有哪些，而addClass和slideDown影響了參照的節點。
一些jQuery函式返回特定的值（例如$('#input-user-email').val()）。在這些情況下，由於該值沒有參照jQuery物件，連結將不起作用。

建立新的DOM元素

除了通過jQuery物件階層存取DOM節點外，如果作為參數傳遞給$()的字串看起來像HTML，也可以建立新的DOM元素。例如，這行程式碼找到ID為carmakes的HTML select元素，並會增加一個value屬性為"VAG"、文字為"Volkswagen"的option元素：
$('select#carmakes')
  .append($('<option />')
    .attr({value:"VAG"})
    .append("Volkswagen"));

工具函式

帶有$.字首的jQuery函式是工具函式，或者說是影響全域屬性和行為的函式。下面的例子使用了函式each()來遍歷陣列：
$.each([1,2,3], function() {
  console.log(this + 1);});
這會將「2」，「3」，「4」寫入控制台。

Ajax

使用$.ajax()可以執行跨瀏覽器的Ajax請求。其相關方法可用於載入和處理遠端資料。
$.ajax({
  type: 'POST',
  url: '/process/submit.php',
  data: {
    name : 'John',
    location : 'Boston',
  },}).done(function(msg) {
  alert('Data Saved: ' + msg);}).fail(function(xmlHttpRequest, statusText, errorThrown) {
  alert(
    'Your form submission failed.\n\n'
      + 'XML Http Request: ' + JSON.stringify(xmlHttpRequest)
      + ',\nStatus Text: ' + statusText
      + ',\nError Thrown: ' + errorThrown);});
本範例將資料name=John和location=Boston釋出到伺服器上的/process/submit.php。當這個請求結束時，會呼叫success函式來提醒用戶。如果請求失敗，它會提醒用戶，告知該請求的狀態以及特定的錯誤。

非同步

請注意，上面的例子使用$.ajax() 的延期性來處理它的非同步特性：.done()和.fail()建立僅在非同步過程完成時才執行的回呼。

子專案

以下專案均是源自於Interface外掛程式

jQuery UI

基於jQuery的使用者介面庫，包括拖放、縮放、對話方塊、標籤頁等多個元件。

jQuery Tools

jQuery Tools是一個第三方的套件，基於jQuery。包括了標籤頁、表單驗證、滑鼠滾輪事件等多個元件。

jQuery Mobile

基於jQuery的手機網頁製作工具，jQuery Mobile的網站上包含了網頁的設計工具、主題設計工具。另外jQuery Mobile的js外掛程式包含了換頁、事件等的多項功能。