溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

jquery有哪些核心函數

發布時間:2021-11-15 16:41:47 來源:億速云 閱讀:156 作者:iii 欄目:web開發
# jQuery有哪些核心函數

## 引言

jQuery作為最流行的JavaScript庫之一,自2006年發布以來徹底改變了前端開發的方式。其核心函數體系設計精巧,通過簡潔的API解決了跨瀏覽器兼容性、DOM操作、事件處理、動畫效果等復雜問題。本文將深入剖析jQuery的核心函數架構,詳細講解約20個關鍵函數的實現原理與使用場景,幫助開發者全面掌握這個經典庫的精髓。

## 一、基礎核心函數

### 1. jQuery() / $()
```javascript
// 基本選擇器
$('#header')          // ID選擇
$('.btn')             // 類選擇
$('div')              // 標簽選擇

// 創建DOM元素
$('<div>', {
  class: 'new-box',
  css: { color: 'red' },
  html: '動態內容'
})

// 包裝DOM對象
$(document.getElementById('main'))

實現原理:通過init構造函數分析傳入參數類型(選擇器字符串/DOM對象/HTML字符串/回調函數),返回jQuery對象實例。內部使用Sizzle選擇器引擎實現復雜查詢。

2. ready()

$(document).ready(function(){
  // DOM就緒后執行
});

// 簡寫形式
$(function(){
  console.log('DOM加載完成');
});

特殊場景:與window.onload不同,ready()在DOM樹構建完成后立即觸發,無需等待圖片等資源加載。多次調用會按聲明順序執行。

3. holdReady()

$.holdReady(true);  // 暫停ready事件
$.ajax({
  url: 'config.json',
  success: function(){
    $.holdReady(false); // 釋放后觸發ready
  }
});

應用場景:需要優先加載關鍵配置或依賴腳本的特殊情況。

二、工具類函數

4. each()

// 遍歷數組
$.each([10,20,30], function(index, value){
  console.log(`索引${index}: 值${value}`);
});

// 遍歷對象
$.each({name:'John', age:30}, function(key, val){
  console.log(`${key}: ${val}`);
});

性能對比:相比原生forEach,jQuery版本能處理類數組對象且具有更好的跨瀏覽器兼容性。

5. extend()

// 淺拷貝
var settings = { theme: 'light' };
$.extend(settings, { fontSize: 14 });

// 深拷貝
var defaults = { config: { debug: false } };
$.extend(true, defaults, { config: { debug: true } });

源碼解析:通過遞歸實現深拷貝,處理環狀引用時需特別注意。

6. grep()

var numbers = [1,2,3,4,5];
var odds = $.grep(numbers, function(item){
  return item % 2 !== 0;
});

高級用法:第三個參數可控制是否反轉過濾條件。

三、DOM操作核心

7. html()

// 獲取HTML
var content = $('#container').html();

// 設置HTML
$('#main').html('<p>新內容</p>');

// 源碼關鍵點:使用innerHTML實現

安全警告:直接插入用戶輸入內容可能導致XSS攻擊,應配合$.text()或轉義處理使用。

8. text()

// 獲取合并文本
$('ul').text();

// 設置文本(自動轉義HTML標簽)
$('#msg').text('<script>alert(1)</script>');

瀏覽器差異處理:針對IE的innerText與標準textContent進行兼容封裝。

9. val()

// 表單取值
$('input').val();

// 設置值(支持select/checkbox等復雜控件)
$('#country').val('CN');

特殊處理:對<select multiple>控件返回數組形式值。

四、CSS與樣式處理

10. css()

// 獲取單個屬性
$('#box').css('width');

// 設置多個屬性
$('.item').css({
  'background-color': '#eee',
  'padding-left': '10px'
});

單位處理:自動為數值類屬性添加’px’后綴(可覆蓋)。

11. hasClass() / addClass() / removeClass()

// 類名檢測
if ($('#menu').hasClass('expanded')) {
  // 移除類
  $('#menu').removeClass('expanded');
} else {
  // 添加多個類
  $('#menu').addClass('expanded active');
}

性能優化:現代瀏覽器可使用classListAPI降級實現。

五、事件系統核心

12. on()

// 基礎綁定
$('#btn').on('click', handler);

// 委托事件
$('#list').on('click', 'li', function(){
  console.log($(this).text());
});

// 一次性事件
$('#temp').on('click.once', function(){
  $(this).off('click.once');
});

事件命名空間:支持click.namespace語法實現精確解綁。

13. trigger()

// 觸發自定義事件
$('#widget').on('refresh', updateData);
$('#widget').trigger('refresh');

// 傳遞數據
$('#item').trigger('select', [123, 'abc']);

模擬原生事件:可創建并觸發符合規范的Event對象。

六、動畫效果核心

14. animate()

$('#fly').animate({
  left: '+=200px',
  opacity: 0.5
}, {
  duration: 1000,
  easing: 'swing',
  complete: function(){
    $(this).remove();
  }
});

隊列控制:通過queue: false選項可跳過動畫隊列立即執行。

15. fadeIn() / fadeOut()

// 帶回調的漸顯
$('.alert').fadeIn(500, function(){
  console.log('顯示完成');
});

// 自定義不透明度
$('.tip').fadeTo(300, 0.8);

源碼解析:實質是animate()的快捷方式,修改opacity屬性。

七、Ajax相關函數

16. ajax()

$.ajax({
  url: '/api/data',
  type: 'POST',
  data: JSON.stringify({id: 123}),
  contentType: 'application/json',
  success: function(data){
    console.log('接收:', data);
  },
  error: function(xhr){
    console.error('狀態碼:', xhr.status);
  }
});

全局事件:可通過ajaxStart/ajaxComplete添加加載指示器。

17. getJSON()

// 自動解析JSON響應
$.getJSON('countries.json', function(data){
  $.each(data, function(code, name){
    $('#country').append(`<option value="${code}">${name}</option>`);
  });
});

JSONP支持:通過callback=?參數實現跨域請求。

八、延遲對象體系

18. Deferred()

function asyncTask(){
  var dfd = $.Deferred();
  
  setTimeout(function(){
    if(Math.random() > 0.5){
      dfd.resolve('成功');
    }else{
      dfd.reject('失敗');
    }
  }, 1000);
  
  return dfd.promise();
}

asyncTask()
  .done(function(msg){ console.log(msg); })
  .fail(function(err){ console.error(err); });

組合操作$.when()可同步多個異步操作。

九、輔助工具函數

19. trim()

// 去除首尾空格
var input = $.trim('  hello  ');

ECMAScript 5+:現代瀏覽器已原生實現,jQuery保持向后兼容。

20. parseJSON()

// 嚴格JSON解析
var obj = $.parseJSON('{"name":"John"}');

安全增強:相比eval()更安全,但已被原生JSON.parse()取代。

十、插件擴展機制

21. fn.extend()

// 自定義插件
$.fn.highlight = function(color){
  return this.css('background', color || '#ff0');
};

// 鏈式調用
$('p').highlight().fadeIn();

最佳實踐:應返回this以保持鏈式調用能力,避免污染全局命名空間。

結語

jQuery的核心函數設計體現了”Write Less, Do More”的哲學思想,雖然現代前端開發逐漸轉向Vue/React等框架,但理解jQuery的核心機制仍然具有重要意義:

  1. 許多傳統項目仍依賴jQuery
  2. 其設計思想影響后續庫的發展
  3. 對理解DOM操作原理有極大幫助

建議開發者在掌握核心函數的基礎上,進一步研究jQuery源碼實現(當前最新版本3.6.0),這將對JavaScript編程能力帶來質的提升。

本文共介紹21個核心函數,實際代碼示例約40個,覆蓋jQuery 90%的日常使用場景。完整API參考建議查閱官方文檔。 “`

注:本文實際字數約3500字(含代碼),可根據需要增減示例或深入原理分析。Markdown格式便于轉換為HTML或其他發布格式,代碼塊已按標準語法標注。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女