jQuery 1.4 版本的十五個新特性

2020-12-11 站長之家

jQuery 1.4 最近發布了。 超乎大家的預期,這次並非簡單的修修補補,1.4 包含了很多新特性、功能增強和性能提升!本文即向您介紹這些可能對你十分有用的新特性和優化增強。

你可以立刻下載jQuery 1.4試用: https://code.jquery.com/jquery-1.4.js

1. 傳參給 jQuery(…)

之前,jQuery可以通過 attr 方法設置元素的屬性,既可傳屬性的名和值,也可以是包含幾組特定 屬性名值對 的 對象。在 jQuery 1.4 中,你可以把一個參數對象作為第二個參數傳給 jQuery 函數本身,同時創建HTML元素。

比方說你想要創建一個帶有幾個屬性的錨記元素(<a></a>)。在1.4中,一切如此簡單:

jQuery('<a/>', {
id: 'foo',
href: 'https://google.com',
title: 'Become a Googler',
rel: 'external',
text: 'Go to Google!'
});

你大概也能猜到,這個錨記元素沒有的 text 屬性會調用 jQuery 的私有方法 .text() ,把元素裡的文字設置為「Go to Google!」

針對這一用法,下面是更有用的實例:

jQuery('<div/>', {
id: 'foo',
css: {
fontWeight: 700,
color: 'green'
},
click: function(){
alert('Foo has been clicked!');
}
});

id 為一般屬性,被直接加上了,而 css 和 click 則激發了相應的 jQuery 方法。在1.4以前,上面的代碼需寫成這個樣子:

jQuery('<div/>')
.attr('id', 'foo')
.css({
fontWeight: 700,
color: 'green'
})
.click(function(){
alert('Foo has been clicked!');
});

詳細了解 jQuery(…)

2. 直到遇見你...

1.4的DOM遍歷工具包裡又增加了3個新方法: nextUntil, prevUntil   和   parentsUntil 。這些方法會按照特定的方向遍歷DOM,直到遇到滿足指定選擇符的元素為止。舉例來說,現在我們有一張水果名的清單:

<ul>
<li>Apple</li>
<li>Banana</li>
<li>Grape</li>
<li>Strawberry</li>
<li>Pear</li>
<li>Peach</li>
</ul>

我們想挑選出所有在 Apple 後,Pear 前的所有條目。代碼十分簡單:

jQuery('ul li:contains(Apple)').nextUntil(':contains(Pear)');

詳細了解: prevUntil, nextUntil, parentsUntil

3. 綁定多個事件處理器

不再需要把各個事件綁定方法「鏈」在一起,現在你可以把它們捆成一堆,如下:

jQuery('#foo).bind({
click: function() {
// do something
},
mouseover: function() {
// do something
},
mouseout: function() {
// do something
}
})

這一用法也適用於 " .one() ".

詳細了解 .bind(…)

4. 依屬性指定緩動效果

以前只能為一個動畫指定一種緩動效果(easing,即動畫過程中的速度變化規律。jQuery 原生支持兩種緩動效果,swing(默認)和linear 。要使用其他效果,你需要自己另行下載。),現在你可以為動畫的各個屬性參數指定不同的緩動效果:

jQuery('#foo').animate({
left: 500,
top: [500, 'easeOutBounce']
}, 2000);

點此查看實際效果

你也可以在一個可選的動畫選項對象中為 secialEasing 設置一系列名值對來完全上面的工作:

jQuery('#foo').animate({
left: 500,
top: 500
}, {
duration: 2000,
specialEasing: {
top: 'easeOutBounce'
}
});

編輯註:我們的作者 James Padolsey 謙虛了,這一功能點是他想出來的哦!

詳細了解有關 per-property-easing 的內容

5. 更新的 Live 事件

jQuery 1.4 添加了對指派 submit change focusblur 事件的支持。在jQuery中,我們利用" .live() " 方法指派事件。當你想要為多個元素註冊事件處理器時,這會非常有用。而且就算滿足選擇符的元素是新出現的,這些事件也會繼續有效(使用   .live()   比不斷重複綁定要省力省心得多)。

不過,當心了! 註冊 focus 和 blur 事件時你需要用 focusinfocusout 作為事件名。

jQuery('input').live('focusin', function(){
// do something with this
});

6. 控制函數上下文

jQuery 1.4 提供了一個全新的   proxy   函數,位於 jQuery 命名空間下。這一函數接受兩個參數,一個是「作用域」(scope)或者一個方法名,另一個是某函數或者目標作用域(the intended scope)。

眾所周知, JavaScript的 this 關鍵字是一個很難把握的東西。有時候你並不想它代表一個元素,而想讓它代表你前面創建的某個對象。

例如,在這裡我們創建了一個   app   對象,它擁有兩個屬性,一個是   clickHandler   方法,一個是負責參數配置的對象。

var app = {
config: {
clickMessage: 'Hi!'
},
clickHandler: function() {
alert(this.config.clickMessage);
}
};

這個 clickHandler 方法,當像 app.clickHandler() 這樣調用時, app 就是其上下文,也就是說   this   關鍵字指向的是 app 。如果只需簡單地調用,這樣的寫法沒什麼問題:

app.clickHandler(); // "Hi!" is alerted

不過如果把它當作一個事件處理器:

jQuery('a').bind('click', app.clickHandler);

當我們點擊這個錨記時,並沒有達到預想的效果(沒東西 alert 出來)。這是因為 jQuery (以及大部分理智的事件模型),默認地,都會把處理器的上下文指定為目標元素本身。也就是說, this 所代表正是被點擊的這個連結。而我們想的是, this   應該繼續代表   app   。在jQuery 1.4中,實現這一目的十分簡單:

jQuery('a').bind(
'click',
jQuery.proxy(app, 'clickHandler')
);

現在點擊所有錨記都會彈出「Hi!」了。

代理函數把你的函數包裹一圈,同時把函數內的   this   設定為你想要東西。在其他上下文應用場景,如把回調函數傳給其他 jQuery 方法或插件,代理函數也能派上用場。

了解更多   jQuery.proxy 

7.   動畫隊列延遲

現在,可以給動畫隊列加一個延遲了。雖然這個功能可以在任何隊列裡實現,但最常用的可能還是延遲「fx 隊列」("fx" queue,jQuery默認的動畫隊列)。它能讓你在兩個動畫行為之間暫停一下,而不用牽扯到回調函數和   setTimeout   之類的東西。 .delay()   的第一個參數即你需要設定的延遲毫秒數:

jQuery('#foo')
.slideDown() // Slide down
.delay(200) // Do nothing for 200 ms
.fadeIn(); // Fade in

如果你想延遲一個除 fx 以外的隊列,把隊列名作為第二個參數傳給   .delay() 就可以了 。

詳細了解   .delay(…)

8. 檢測元素是否含有特定內容

jQuery 1.4 讓檢測一個元素(或集合)是否含有( .has() )某項東西更為容易。其背後的機理和選擇過濾器   :has() 是一樣的。這個方法會從當前集合中選出滿足任意指定條件之一的元素。 jQuery('div').has('ul');

這條語句在所有DIV元素中挑出那些包含UL元素的。這種情況可能用選擇過濾器   :has()   就好了,但當你要更程式化地過濾選擇集時   .has()   方法就十分有用了。

jQuery 1.4 還在 jQuery 命名空間下新增了一個   contains 函數。這是一個比較底層的函數,接受兩個 DOM 節點為參數。返回一個布爾值,指示第二個元素是否包含在第一個元素中。例如:

jQuery.contains(document.documentElement, document.body);
// 返回true - <body> 確實包含在 <html> 中

消息了解: .has(…) , jQuery.contains(…)

9. 給元素剝皮!

很早以前,jQuery 就可以用   .wrap()   給元素裹一層皮。現在, jQuery 1.4 添加了   .unwrap()   方法,用以剝皮。看下面的DOM結構:

<pre name="code]<div>
<p>Foo</p>
</div>[/code]

來把 p 元素外面的一層皮(div)剝掉:

DOM 變成了:

總而言之,這個方法可以把任意元素的父元素移除。

詳細了解   .unwrap(…)

10. 移除元素,而不刪除數據

以前有一個 .remove() 方法,是把元素剝離後拋棄。全新的  .detach() 方法可以讓你把一個元素從DOM中剝離,而不丟失數據。囊括該元素的 jQuery 對象會在操作完成後還保留這個元素。數據可以通過   .data() 或者 jQuery 事件系統中的任意事件處理器傳入 jQuery 對象。

當你需要把某個元素從DOM中移除,然後在將來某個場景中重新引入時,這個函數會很有用。元素的事件句柄和其他所有數據都會被保留。

var foo = jQuery('#foo');
// 綁定一個重要的事件處理器
foo.click(function(){
alert('Foo!');
});
foo.detach(); // 從DOM中移除
// … do stuff
foo.appendTo('body'); // 重新加入到DOM
foo.click(); // 彈出alert信息: "Foo!"

詳細了解   .detach(…)

11. index(…) 的功能增強

jQuery 1.4 為您使用   .index()   提供了兩種新方法。以前,你必須把元素作為參數傳給它,然後獲得一個返回的數值,代表在當前集合中這個元素的索引。現在,如果不傳參數過去,返回的值就代表某元素在其同輩中排行老幾。比方說下面的DOM:

<ul>
<li>Apple</li>
<li>Banana</li>
<li>Grape</li>
<li>Strawberry</li>
<li>Pear</li>
<li>Peach</li>
</ul>

你想要曉得點擊一個條目後它是列表中的第幾個,實現的代碼十分簡單:

jQuery('li').click(function(){
alert( jQuery(this).index() );
});

jQuery 1.4 也允許你將選擇符作為   .index()   的第一個參數。這樣做會返回當前元素在你指定的選擇符所匹配出的元素集合中的索引值。

還得提醒一點,這一方法返回的是數值,如果文檔中無法找到指定條件的元素,會返回數值 -1 。

詳細了解   .index(…)

12. DOM 操縱可接收回調函數

現在,大部分的DOM操縱方法都支持了將 函數 作為單一參數傳入( .css()   和   .attr()   傳入為第二個參數)。這個函數會為選擇集中的每一個元素都跑一遍,從而為相應操縱方法提供更「有個性」的值。

下列方法支持這一功能:

after
  

before
  

append
  

prepend
  

addClass
  

toggleClass
  

removeClass
  

wrap
  

wrapAll
  

wrapInner
  

val
  

text
  

replaceWith
  

css
  

attr
  

html

有了回調函數,你就能在選擇集中利用   this   關鍵字來訪問當前元素,用回調函數的第一個參數來訪問其索引值。

jQuery('li').html(function(i){
return 'Index of this list item: ' + i;
});

還有還有,上面的某些方法還提供第二個參數供你利用。如果你調用的是一個設定型方法(如 .html()   和   .attr('href...)   ),你還能取得當前值。例如:

jQuery('a').attr('href', function(i, currentHref){
return currentHref + '?foo=bar';
});

如您所見,對於 .css()   和   .attr()   方法來說,之所以要把函數作為第二個參數傳遞,是因為第一個參數要用來指定我們需要修改的是哪一個屬性:

jQuery('li').css('color', function(i, currentCssColor){
return i % 2 ? 'red' : 'blue';
});

13. 判定對象類型

jQuery 1.4 新增了兩個全新的輔助函數(都直接位於 jQuery 命名空間下),可以幫助你判別你正在操縱的是何種對象。

第一個函數是   isEmptyObject , ,它返回一個布爾值,判定對象是否為空()。第二個是   isPlainObject   ,它返回的布爾值代表傳遞過去的參數是否為JavaScript的簡單對象(plain object),也就是用   {} 或 new Object() 創建的對象。 複製內容到剪貼板

jQuery.isEmptyObject({}); // true
jQuery.isEmptyObject({foo:1}); // false
jQuery.isPlainObject({}); // true
jQuery.isPlainObject(window); // false
jQuery.isPlainObject(jQuery()); // false

了解更多: isPlainObject(…) , isEmptyObject(…)

14. Closest(…) 的功能增強

jQuery的 .closest()   方法現在可以接受一組選擇符作為參數。當你需要遍歷某一元素的所有上級,找到一個以上符合特定特徵的最近元素時,此功能就能派上用場。

而且,現在它還能接受上下文環境作為第二個參數,也就是說你可以控制DOM遍歷的深度或者說遠度。雖然說大家可能很少會用到這兩個新特性,但一旦用上效果是驚人的!

了解更多   .closest(…)

15. 新事件! focusIn 與 focusOut

如前所述,現在部署 focus 和 blur 事件時,你需要使用 focusin 和 focusout 這兩個新事件。這兩個事件幫助你在特定元素或者該元素的子元素 獲取/失去 焦點時採取行動。 

jQuery('form')
.focusin(function(){
jQuery(this).addClass('focused');
});
.focusout(function(){
jQuery(this).removeClass('focused');
});

值得說明的是,這兩個事件不會傳播開來(即所謂的「冒泡」),它們會被捕獲住。也就是說,外部元素(父輩)會在作孽的「目標」元素(causal "target" element)之前被觸發。

相關焦點

  • 最新jQuery Mobile 1.2版本新特性
    大家還記得在jQuery 1.0 RC版本發布的時候我們曾經發布過一個jQuery Mobile RC版本介紹文章介紹主要的特性。就在前不久,jQuery Mobile團隊又發布了jQuery Mobile 1.2。
  • jQuery 1.9 正式版發布,最後支持 IE 6/7/8 的版本
    jQuery 1.9 正式版發布了,同時發布的還有 jQuery Migrate 1.0,如果你想使用該版本請先閱讀 jQuery
  • 動手編譯自定義版本的最新 jQuery 類庫?
    日期:2012-9-21  來源:GBin1.com
  • jQuery 3.0 Alpha 發布,Deferred 兼容 Promise
    jQuery 3.0 預覽版發布,此版本是 jQuery 3.0 的第一個 Alpha 預覽版!
  • 超棒的jQuery矢量地圖生成插件 - JQVAMP
    在現代瀏覽器中它使用了SVG(Scalable Vector Graphics)技術生成地圖圖片,如果你也需要支持老版本的瀏覽器,例如,IE6/7/8的話,它也可以通過VML來實現,非常不錯的jQuery插件,相信大家一定會喜歡!
  • jquery attribute vs property 的區別
    bug收集:專門解決與收集bug的網站網址:www.bugshouji.comattribute vs property 的區別property 是 DOM 中的屬性,是 JavaScript 裡的對象;attribute 是 HTML 標籤上的特性
  • PS2模擬器PCSX2 1.4.0版本發布 新增特性無限存檔
    該版本模擬器與之前相比,明顯在多方面都有顯著提升。那麼我們就帶玩家一同了解一下1.4.0版本的PS2究竟新增了怎樣的有用特性。 PCSX2穩定版步入1.4.0階段   玩家可點擊連結下載PCSX2 1.4.0模擬器官方版本。
  • jQuery學習筆記
    https://jquery.com/download/// 第一個為壓縮版本(將複雜的變量名簡化 去除空格等) 消耗資源少 導入更快捷 推薦使用// 第二個為未壓縮版本(完整 可讀性高 想要閱讀源碼可以下載)// 點擊下載連結 複製粘貼到新建的文件夾裡 或者直接ctrl-s保存到本地
  • jQuery 3.1.0 發布 - OSCHINA - 中文開源技術交流社區
    jQuery 3.1.0 發布了,該版本主要修復之前 3.0 版本潛在的一些問題。
  • jQuery 1.5發布 Ajax模塊重寫
    壓縮版本jQuery Minified 29KB,不壓縮版本jQuery Regular(用於閱讀和調試)207KB。由於jQuery已經成為目前最流行的JavaScript庫,得到廣泛的支持,新版本的發布當然非常引人注目。
  • Linux Mint 20 與 Debian 版本 LMDE 4 新特性
    )4 也將到來,LMDE 版本基於 Debian GNU/Linux,提供滾動發布,而不是像常規的 Linux Mint 基於 Ubuntu。日前 Linux Mint 官方博客釋出了關於 Linux Mint 20 與 LMDE 4 的新特性信息。
  • PHP7版本中有哪些新特性?
    PHP7版本中的新特性有哪些?一點PHP博客分享關於php7.0中的一些新特徵,在PHP7中由於修改了底層引擎大部分代碼,以及通過各種方式提高PHP的性能,所以在PHP7中也增加了一些新的語法,這些語法的使用也能對提高性能有幫助。
  • 使用jQuery Mobile 和 CSS3 實現響應式設計
    雖然 jQuery Mobile 框架提供了一種方法,可快速、輕鬆地創建移動版本的網站,但它目前沒有(而且很有可能永遠也不會)提供一種固有的方法來根據設備的屏幕解析度動態響應用戶 的設備。事實上,jQuery Mobile 網站作出聲明,原有的 Media Query Helper Classes 特性 在 beta 中已被棄用,並且已從最新的版本中刪除。
  • ES6:下一版本的JavaScript的新特性
    你可能已經聽說過EMCAScript6(ES6)了,這是下一個版本的Javascript,它包含了一些很棒的新特性。這些特性擁有不同程度的複雜性,對於簡單的腳本和複雜的應用程式都非常的有用。本文將盤點一些ES6的新特性,這些特性都可以用在你日常的編碼中。
  • 第八篇:jQuery的使用及元素選擇器
    下載jQuery為了能夠使用jQuery,需要從jQuery官網下載最新的jQuery庫,在jQuery官網首頁,有下載最新jQuery版本的按鈕,單擊按鈕即可下載最新版本的jQuery庫。當前最新版本是jQuery 3.5.1。
  • 7 個 jQuery 最佳實踐
    事實上,我選擇了其中7個最常見的場景。 1、使用CDN及其回退地址(fallback)  CDN代表內容傳遞網絡(Content Delivery Network),是一個緩存了JavaScript文件的伺服器。使用CDN之後,每當一個新用戶發起請求的時候,你的應用程式可以使用CDN緩存,而不用從你的伺服器上重新加載庫文件。
  • jQuery 設置
    jQuery - 設置內容和屬性設置內容 - text()、html() 以及 val()我們將使用前一章中的三個相同的方法來設置內容:
  • 我的世界:1.17第1個快照來了!2種新礦石、5個新物品、3個新特性
    此次快照當中主要發布了2種新礦石、4個新物品以及3個全新特性(Java)。 二、5個新物品 本次更新除了推出2種礦石以外,更新增5個新物品:避雷針、紫水晶玻璃、望遠鏡、口袋以及蠟燭
  • 從0到1~jQuery入門基礎(t216-t225)
    /js/jquery-3.5.1.js"></script> <script> $(function () { $("div").mouseover(function () { $(this).css("background-color","#cccccc
  • jquery與js的區別是什麼?js與jquery的用法區別介紹
    在學習js的時候我們肯定能夠接觸到jquery,那麼,js與jquery之間有什麼區別呢?本篇文章將給大家來分享關於jquery與js之間的區別比較,有需要的小夥伴可以參考一下,希望能夠幫助到你們。我們來簡單看一下jquery與js的概念。js是一種腳本語言,常用於網頁客戶端編程,使網頁在客戶端瀏覽器中,實現更多地動態功能,表現出更加豐富的視覺效果。jquery是一個快速、簡潔的JavaScript框架,極大的簡化了javascript編程。