今年1月51CTO曾為您報(bào)道過(guò)jQuery 1.4發(fā)布的消息,在這個(gè)版本中,jQuery有相當(dāng)多的改進(jìn)與功能更新,它不僅包含了很多新的特性,還改進(jìn)了很多功能, 更在性能優(yōu)化方面下了很大功夫, 本文將對(duì)這些新的特性和增強(qiáng)的部分進(jìn)行討論,希望能對(duì)你有所幫助。
jQuery 1.4版本下載地址: http://code.jquery.com/jquery-1.4.js
下面我們通過(guò)講解和示例代碼來(lái)詳細(xì)介紹jQurey 1.4版本中你應(yīng)該知道并使用的十大新特性。
1. 傳遞屬性給jQuery
在之前的版本中jQuery就通過(guò)"attr”方法支持了添加屬性到元素集合中,"attr”方法不僅可以傳遞屬性名和值,也可以傳遞包含有多個(gè)屬性的對(duì)象集合。在jQurey 1.4中,除了可以創(chuàng)建新的對(duì)象,現(xiàn)在它更能將屬性對(duì)象作為參數(shù)傳遞給jQuery函數(shù)或?qū)ο笞陨?。如你可以?chuàng)建一個(gè)含有多個(gè)屬性的鏈接元素。
- jQuery('<a></a>', {
- id: 'gid',
- href: 'http://www.google.com',
- title: 'google非和諧版',
- rel: 'external',
- text: '進(jìn)入<SPAN class=t_tag onclick=tagshow(event) href="tag.php?name=Google"
mce_href="tag.php?name=Google">Google</SPAN>!'- });
你可能會(huì)注意到"text”屬性并且猜測(cè)它是干嗎的,因?yàn)閍標(biāo)簽是沒(méi)有"text”屬性的。呵呵,當(dāng)你傳遞某些屬性時(shí),jquery 1.4同樣會(huì)檢查并使用它自己的方法。因此上面的"text”屬性可以讓jQuery調(diào)用它的".text()”方法并將"進(jìn)入Google!“作為它的唯一參數(shù)。
這里給出一個(gè)更好的例子:
- jQuery('<div/>', {
- id: 'foo',
- css: {
- fontWeight: 700,
- color: 'green'
- },
- click: function(){
- alert('Foo被點(diǎn)擊過(guò)!');
- }
- });
"id”屬性是作為一個(gè)普通屬性被添加的。但"css”和"click”屬性則對(duì)應(yīng)特定的jQuery方法。上面的代碼在1.4之前一種寫(xiě)法如下:
- jQuery('<div/>')
- .attr('id', 'foo')
- .css({
- fontWeight: 700,
- color: 'green'
- })
- .click(function(){
- alert('Foo被點(diǎn)擊過(guò)!');
- });
2. 所有的東西都可以"until“了
jQuery 1.4新增了三個(gè)對(duì)DOM操作的方法,他們分別是"nextUntil", "prevUntil" 和 "parentsUntil"。 這些方法會(huì)按照某個(gè)順序去遍歷DOM對(duì)象直到滿足指定的篩選條件。假設(shè)我們有一個(gè)水果列表:
- <ul>
- <li>蘋(píng)果</li>
- <li>香蕉</li>
- <li>葡萄</li>
- <li>草莓</li>
- <li>例子</li>
- <li>桃子</li>
- </ul>
如果你想選擇所有在"Apple”和"Strawberry”之間的元素。代碼可以這樣寫(xiě):
- jQuery('ul li:contains(蘋(píng)果)').nextUntil(':contains(梨子)'); // 得到 香蕉,葡萄,草莓
3. 綁定多個(gè)事件
與通過(guò)jquery鏈綁定多個(gè)方法到一起相比,現(xiàn)在你可以通過(guò)一次調(diào)用來(lái)綁定所有這些事件,如:
- jQuery('#foo).bind({
- click: function() {
- // 具體代碼
- },
- mouseover: function() {
- // 具體代碼
- },
- mouseout: function() {
- // 具體代碼
- }
- })
你也可以通過(guò) ".one()"方法操作。
4、檢查元素是否擁有某對(duì)象
通過(guò)".has()”方法,jQuery 1.4使得檢查一個(gè)元素(或者集合)是不是有某對(duì)象變得相當(dāng)簡(jiǎn)單。從程序角度看,它和jQuery的selector過(guò)濾器":has()”是一樣的。該方法會(huì)返回在當(dāng)前集合中所有包含有至少一個(gè)符合條件的元素?cái)?shù)組。
- jQuery('div').has('ul');
上面方法會(huì)返回所有包含有UL元素的DIV元素?cái)?shù)組。在這種情況下,你可能會(huì)更傾向于簡(jiǎn)單使用選擇器的過(guò)濾器(":has()"), 但當(dāng)你需要通過(guò)代碼過(guò)濾一個(gè)數(shù)組的時(shí)候,該方法仍會(huì)很有用。
jQuery 1.4同樣在jQuery命名空間下添加了新的"contains"函數(shù)。這是一個(gè)低級(jí)的函數(shù),它接受兩個(gè)DOM節(jié)點(diǎn)作為參數(shù)。它會(huì)返回一個(gè)布爾值來(lái)表示后面一個(gè)元素是否在前面一個(gè)元素中存在。如:
- jQuery.contains(document.documentElement, document.body);
- // 返回true - <body>在<html>存在
5、去掉元素的包裝
".warp()”已經(jīng)在jQuery中有段日子了,現(xiàn)在跟它對(duì)應(yīng)的".unwrap()”方法也被加進(jìn)到1.4中了。這個(gè)方法剛好跟warp()方法相反。假設(shè)有下面的DOM結(jié)構(gòu):
- <div>
- <p>Foo</p>
- </div>
我們可以用下面的函數(shù)去掉段落元素的外層:
- jQuery('p').unwrap();
最終的DOM結(jié)構(gòu)如下:
- <p>Foo</p>
注意,這個(gè)方法處理比較簡(jiǎn)單,它會(huì)移掉任何元素的父節(jié)點(diǎn)。
6、detach() vs remove()
新的".detach()”方法允許你從DOM中移掉元素,這跟".remove()”很像。但與".remove()”有本質(zhì)不同的是"detach()”不會(huì)將jQuery賦給該元素的數(shù)據(jù)也給注銷(xiāo)掉。這包含通過(guò)".data()”和其他任意的通過(guò)jQuery的事件系統(tǒng)添加的事件等數(shù)據(jù)。
- var foo = jQuery('#foo');
- // 綁定一個(gè)重要的事件
- foo.click(function(){
- alert('Foo!');
- });
- foo.detach();
- // 從 DOM中移除事件
- // … 其他操作
- foo.appendTo('body');
- // 將元素重新加入到 DOMfoo.click();
- // 彈出 "Foo!"
7、index(…) 加強(qiáng)
jQuery 1.4中我們有兩種使用".index()”方法的方式。首先,你可以?xún)H僅將一個(gè)元素自身作為參數(shù),這樣你可以得到該元素在當(dāng)前集合中所處的索引位置值。
如果不設(shè)置參數(shù)的話,現(xiàn)在會(huì)返回該元素的兄弟節(jié)點(diǎn)。因此,假設(shè)有下面的DOM結(jié)構(gòu):
- <ul>
- <li>蘋(píng)果</li>
- <li>香蕉</li>
- <li>葡萄</li>
- <li>草莓</li>
- <li>例子</li>
- <li>桃子</li>
- </ul>
一個(gè)節(jié)點(diǎn)被點(diǎn)擊的時(shí)候,你如果想找到在所有的節(jié)點(diǎn)集合中被單擊的節(jié)點(diǎn)的位置,你可以這樣寫(xiě):
- jQuery('li').click(function(){
- alert( jQuery(this).index() );
- });
jQuery 1.4還允許你指定一個(gè)選擇器作為".index()”的第一個(gè)參數(shù),這樣它會(huì)返回該元素在選擇器中產(chǎn)生的元素集合中的位置。最后需要注意的是,如果該元素在集合中存在的話,該函數(shù)會(huì)返回一個(gè)其位置的整數(shù),如果不存在,則返回-1。
8、對(duì)象類(lèi)型判斷
jQuery 1.4添加了兩個(gè)新的方法(直接放到了jQuery命名空間下面)以方便我們來(lái)判斷當(dāng)前處理的對(duì)象的類(lèi)型。
首先是方法"isEmptyObject”,顧名思義,這個(gè)函數(shù)會(huì)返回一個(gè)布爾值來(lái)表明傳遞的對(duì)象是不是空對(duì)象(缺乏屬性--無(wú)論是對(duì)象自身還是繼續(xù)的對(duì)象)。其次是方法"isPlainObject”,它會(huì)返回一個(gè)布爾值來(lái)表明操作的對(duì)象是否是一個(gè)簡(jiǎn)單的js對(duì)象(指通過(guò)"{ }"或者"new Object”創(chuàng)建的對(duì)象)。
- jQuery.isEmptyObject({}); // true
- jQuery.isEmptyObject({foo:1}); // false
- jQuery.isPlainObject({}); // true
- jQuery.isPlainObject(window); // false
- jQuery.isPlainObject(jQuery()); // false
9、Closest(…) 增強(qiáng)
jQuery的".closest()”方法現(xiàn)在可以接受一組選擇器了。如果開(kāi)發(fā)人員想遍歷一個(gè)元素的祖先,并在其中查找離其最近的那些符合某些特征的節(jié)點(diǎn)的時(shí)候,這會(huì)很有用。
另外,該函數(shù)現(xiàn)在也接受將上下文作為第二參數(shù)了。這意味著你現(xiàn)在可以控制你想在DOM中遍歷的元素范圍了。雖然這兩種情況我們一般很少用到,不過(guò)它們?cè)趈Query內(nèi)部被很好的使用。
10、 新的事件focusIn和focusOut
為了委托"focus”和"blur”事件你需要這些新的事件,它們是"focusin”和"focusout”。這些新的事件將允許你在一個(gè)元素或其子元素獲取焦點(diǎn)的時(shí)候進(jìn)行相應(yīng)操作。
- jQuery('form')
- .focusin(function(){
- jQuery(this).addClass('focused');
- });
- .focusout(function(){
- jQuery(this).removeClass('focused');
- });
同時(shí)應(yīng)該注意的是這兩個(gè)事件都不是按冒泡順序傳遞,它們將按捕獲順序觸發(fā)。這意味著最外層的(也即祖先)元素會(huì)在實(shí)際節(jié)點(diǎn)事件觸發(fā)前被觸發(fā)。
除了以上提到的十點(diǎn),jQuery 1.4還有很多有用的改進(jìn)和增強(qiáng),更多特性的解析及示例可以參考jQuery 1.4的官方文檔。
聯(lián)系客服