jQuery1.4新特性

1. 傳參給 jQuery(…)

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

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

Code:

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

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

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

Code:

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

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

Code:

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

詳細了解 jQuery(…)

2. 直到遇見你...

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

Code:

<ul>
<li>Apple</li>

<li>Banana</li>
<li>Grape</li>

<li>Strawberry</li>
<li>Pear</li>

<li>Peach</li>
</ul>

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

Code:

jQuery('ul li:contains(Apple)').nextUntil(':contains(Pear)');
// 選出的是 Banana, Grape, Strawberry

詳細了解: prevUntil, nextUntil, parentsUntil

3. 綁定多個事件處理器

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

Code:

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

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

詳細了解 .bind(…)

4. 依屬性指定緩動效果

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

Code:

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

點此查看實際效果

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

Code:

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 作為事件名。

Code:

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

6. 控制函數上下文

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

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

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

Code:

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

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

Code:

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

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

Code:

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

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

Code:

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

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

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

了解更多 jQuery.proxy

7.? 動畫隊列延遲

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

Code:

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

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

詳細了解 .delay(…)

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

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

Code:

jQuery('div').has('ul');

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

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

Code:

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

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

9. 給元素剝皮!

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

Code:

<div>
<p>Foo</p>
</div>

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

Code:

jQuery('p').unwrap();

DOM 變成了:

Code:

<p>Foo</p>

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

詳細了解 .unwrap(…)

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

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

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

Code:

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:

Code:

<ul>
<li>Apple</li>

<li>Banana</li>
<li>Grape</li>

<li>Strawberry</li>
<li>Pear</li>

<li>Peach</li>
</ul>

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

Code:

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 關鍵字來訪問當前元素,用回調函數的第一個參數來訪問其索引值。

Code:

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

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

Code:

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

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

Code:

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

13. 判定對象類型

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

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

Code:

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 這兩個新事件。這兩個事件幫助你在特定元素或者該元素的子元素 獲取/失去 焦點時采取行動。

Code:

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

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


轉載于:https://www.cnblogs.com/koking/archive/2010/06/15/1758453.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/276025.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/276025.shtml
英文地址,請注明出處:http://en.pswp.cn/news/276025.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python pack unpack_golang 仿python pack/unpack

package includesimport ("bytes""encoding/binary""fmt"_"os""strconv""strings")type Protocolstruct{Format []string}//封包func (p *Protocol) Pack(args ...interface{}) []byte{la :len(args)ls :len(p.Fo…

JavaScript遞歸應用與實踐

遞歸簡單來說就是函數內調用自生的一種方法&#xff0c;形如&#xff1a; function foo(){foo() } 復制代碼下面我列舉一些常用的遞歸應用。 1. 求和&#xff0c;例如求1234...100之和 分析如下&#xff1a; sum(100)sum(99)100 sum(99)sum(98)99 ... sum(1)sum(0)1 復制代碼代…

一個好的設計師_是什么讓一個好的設計師

一個好的設計師重點 (Top highlight)The design manager role has grown considerably over the past five years. As design has been recognised as a business value-driver and organisations have increased their design maturity, we’ve seen lots more design managem…

PHP-Redis擴展安裝 error: ext/standard/php_smart_str.h: No such file or directory

在源碼編譯PHP-redis擴展時&#xff0c;遇到缺少頭文件問題【問題描述】error: ext/standard/php_smart_str.h: No such file or directory 【問題原因】PHP安裝好的頭文件目錄&#xff1a;/php/include/php/ext/standard/&#xff0c;這些頭文件&#xff0c;在php7之前的版本&…

相見恨晚的一款前端布局神器!

大家好&#xff0c;我是若川。歡迎加我微信 ruochuan12&#xff0c;長期交流學習。今天給大家推薦一款非常實用的前端頁面布局神器&#xff0c;點擊下方卡片關注我&#xff0c;或者查看源碼系列文章。頁面和布局是一門前端程序員的必修課&#xff0c;css 從來也不是停留在面試八…

IC設計前端幾本經典書籍

No.1 Writing Testbenches, Functional Verification of HDL Modelsby Janick Bergeron本書主要以HDL&#xff08;verilog/vhdl&#xff09;為例&#xff0c;詳細講述了在IC DESIGN FLOW中Verification 以及Test的設計思想、方法和技巧&#xff0c;涵概了測試的各個方面&#x…

unreal無損音樂百度云_將網易云音樂專用的無損音樂格式轉換成全平臺通用的無損格式...

前幾天發現網易云音樂的ncm格式很坑爹&#xff0c;由于網易云的部分音樂采取了這種流媒體平臺模式&#xff0c;這種格式的歌曲下載到設備本地以后只有在網易云音樂的app上面才能播放&#xff0c;而且還要在會員生效期間才能播今天網易云弄出一個ncm&#xff0c;明天百度音樂來一…

鎖升級

JavaSE1.6為了減少獲得鎖和釋放鎖帶來的性能消耗&#xff0c;引入了“偏向鎖”和“輕量級鎖”。 在JavaSE1.6中&#xff0c;鎖一共有4種狀態&#xff0c;級別從低到高依次是&#xff1a;無鎖狀態、偏向鎖狀態、輕量級鎖狀態和重量級鎖狀態&#xff0c;這幾個狀態會隨著競爭情況…

ux和ui_首先要做的— UX / UI案例研究

ux和ui休息一下&#xff01; (Get some rest!) After four weeks of four-day design sprints each week, I welcomed the opportunity to work on this 9-day design challenge. With this also being an individual project, I allocated 50% of my time on the UX process a…

微信消息模板換行符轉義問題處理

通常的微信模板&#xff1a; Hello &#xff01;\n\n Are you OK&#xff1f; ① 直接定義字符串&#xff1b; ② 數據庫中讀取&#xff1b;這里需要說明的是 數據庫讀取 的內容&#xff0c;如果直接推送&#xff0c;\n\n是沒有被轉移為換行符的。此時需要&#xff1a; $tplStr…

Vue2 徹底從 Flow 重構為 TypeScript,煥然一新!

大家好&#xff0c;我是若川。歡迎加我微信 ruochuan12&#xff0c;長期交流學習。今天分享一篇技術熱點&#xff0c;眾所周知&#xff0c;前不久vue3不打算支持IE11&#xff0c;vue2將支持composition API&#xff0c;現在vue2用ts重構&#xff0c;試問&#xff1a;還學得動嘛…

紅米note5linux刷機包__最新最全的紅米Note5ROM刷機包下載、刷機教程_紅米Note5論壇_移動叔叔...

本帖最后由 壓力山大大叔 于 2018-5-15 00:52 編輯20180513跟新全屏手勢。看最后一張載圖。1&#xff1a;先解鎖&#xff0c;刷第三方&#xff0c;都是這個流程。2非常干凈&#xff0c;只有670兆&#xff0c;刷完沒有找到瀏覽器&#xff0c;刷前下載一個瀏覽器在手機里備用。3電…

每個網頁設計者都自以為是

&#xff08;一&#xff09;垃圾還是經典網頁技術更新很快&#xff0c;一個網站的界面設計壽命僅僅2-3年而已。不管是垃圾還是精品&#xff0c;都沒有所謂的經典。經典只存在于是哪個首次成功創新性的應用。網頁設計 者不管自己的學識、技術和經驗如何&#xff0c;都自以為自己…

文件夾的拷貝

文件夾用來把文件包裹起來&#xff0c;褪去這些外衣&#xff0c;說到底拷貝文件夾也就是拷貝文件 模擬實例&#xff1a;將F:/Picture/test 文件夾 拷貝到 F:/Picture/dir文件夾 該實例中test文件夾下只包含了test.txt文件 步驟分析&#xff1a; 1.通過路徑得到File對象 2.遞歸查…

【抽獎】若川誠邀你加前端群,長期交流學習~

最近有許多讀者朋友關注了我&#xff0c;加我好友沒有來得及拉群交流。另外偷偷告訴你&#xff1a;公眾號回復 411&#xff0c;參與抽獎&#xff0c;送極客時間100元以內的課程&#xff0c;今晚八點開獎&#xff0c;必須開獎前加了我的微信&&像是前端&&關注了我…

帝國cms重置管理員_重新設計《紐約時報》 CMS飛行員

帝國cms重置管理員1.什么是飛行員&#xff1f; (1. What Is Pilot?) For 10 weeks, I joined The New York Times’s Story Formats team as a Product Design Intern. Partnered with technology intern Shormie Faruque, we were tasked with redesigning Pilot.大約十個星期…

微信小程序開發 Request Headers: Provisional headers are shown

在微信小程序開發的時候&#xff0c;寫了兩個API請求&#xff1a; 請求A://請求Awx.request({url: https://wx.baidu.com/api/wx/getBallByDate,method: POST,dataType: json,data: {date: that.data.curDate},header: {content-type: application/json},success: function(dt…

昆山萬象匯機器人_昆山十鎮,在售新盤匯總

陸家建偉國際汽車城&#xff0c;均價 7500 元/㎡美吉特家居廣場&#xff0c;均價 17000 元/㎡美吉特燈都&#xff0c;均價 17000 元/㎡花橋綠地象嶼蘇河公園&#xff0c;均價 22950 元/㎡凱德都會新峰&#xff0c;均價 21500 元/㎡越洋國際&#xff0c;均價 18000 元/㎡浦西玫瑰…

Mini 容器學習筆記6——組件的獲取(應用)

1. 通過組件Id獲取組件實例&#xff1a; [Test]public void GetByIdTest(){ServiceRegistry.Register<Person>("person");var person ServiceLocator.Get<IPerson>("person");Assert.IsTrue(person ! null);var person2 ServiceLocator.Get&…

JavaScript ES2021 最值得期待的 5 個新特性解析

大家好&#xff0c;我是若川。歡迎加我微信 ruochuan12&#xff0c;長期交流學習。今天分享一篇關于ES2021的5個新特性。點擊下方卡片關注我&#xff0c;或者查看源碼等系列文章。學習源碼整體架構系列、年度總結、JS基礎系列在寫本文時&#xff0c;本文提到的新的 JavaScript …