近日,jQuery Core團(tuán)隊(duì)發(fā)布了jQuery 1.8 Beta 1。其代碼位于jQuery CDN上,地址是http://code.jquery.com/jquery-1.8b1.js。GA版預(yù)計(jì)于這個(gè)月發(fā)布。jQuery Core團(tuán)隊(duì)還談到了他們對(duì)于jQuery下一個(gè)版本1.9與2.0的規(guī)劃,并且提到將要移除對(duì)IE6/7/8的支持。
jQuery 1.8
下面是1.8版值得關(guān)注的一些變化。
定制化
jQuery 1.8有一個(gè)基于grunt的全新構(gòu)建系統(tǒng),你可以通過它輕松構(gòu)建自定義的jQuery版本。你現(xiàn)在可以將不需要的模塊排除在外以使得jQuery盡可能地小。要想構(gòu)建自己的自定義版本,請(qǐng)克隆jQuery repo并使用grunt將不需要的模塊排除掉?蛇x的模塊有ajax、css、dimensions、effects與offset。比如說,要想移除所有可選的模塊,使用的命令將會(huì)如下所示:
git clone git://github.com/jquery/jquery.git cd jquery && npm install grunt custom:-ajax,-css,-deprecated,-dimensions,-effects,-offset
這樣會(huì)生成一個(gè)只有約21KB大小的定制化jQuery(最小化且經(jīng)過gzip壓縮)。注意到該功能是面向高級(jí)用戶的,因?yàn)槟惚仨毜们宄?xiàng)目的依賴關(guān)系,特別是所用的第三方插件之間的依賴關(guān)系。感興趣的讀者可以閱讀jQuery README文件以了解完整信息。
自動(dòng)化的廠商CSS前綴
$.css()會(huì)自動(dòng)接收不帶前綴的屬性名,然后生成適合于當(dāng)前瀏覽器的前綴。Web開發(fā)者將不必關(guān)心所有特定于廠商的屬性名了。比如說在Chrome中,jQuery調(diào)用$("#myscroll").css("marquee-direction", "backwards")會(huì)將該CSS設(shè)為-webkit-marquee-direction: backwards。
$.Animation
jQuery動(dòng)畫代碼得到了清理和增強(qiáng),這是通過使用幾個(gè)擴(kuò)展點(diǎn)來實(shí)現(xiàn)的,這些擴(kuò)展點(diǎn)能夠簡(jiǎn)化動(dòng)畫的添加與修改。如果需要支持沒有內(nèi)建動(dòng)畫的老式瀏覽器,那么新的$.Animation則提供了堅(jiān)實(shí)的基礎(chǔ)。如果你只需要支持現(xiàn)代瀏覽器并且使用原生支持的動(dòng)畫,那么你可以完全忽略掉動(dòng)畫模塊。注意,$.Animation相關(guān)的文檔還在編寫當(dāng)中。
Sizzle選擇器引擎更新
Sizzle是jQuery的CSS選擇器引擎,在1.8版中它進(jìn)行了一次較大規(guī)模的重寫。重寫的結(jié)果是對(duì)選擇器匹配帶來了性能上的提升,同時(shí)改進(jìn)了大多數(shù)常見選擇器的快捷方式。
XSS防護(hù)
jQuery 1.8引入了新的方法$.parseHTML,你可以通過它將輸入指定為HTML,并且知道他們將會(huì)被解析為HTML。這是$()無法做到的,因?yàn)樗會(huì)將輸入字符串解析為選擇器。$.parseHTML還提供了一種方式將HTML解析為DOM塊并控制腳本的執(zhí)行。我們強(qiáng)烈建議大家使用$.parseHTML,特別是輸入來自于不受信任的源如URL或是用戶輸入的情況下。jQuery 1.9做出了很多變化以實(shí)現(xiàn)更好的XSS防護(hù),下文將會(huì)對(duì)其進(jìn)行詳述。
全局Ajax事件的附加
全局Ajax事件,如由$.ajax觸發(fā)的ajaxStart,目前可以附加到任何元素上了——甚至是不在文檔中的元素。這會(huì)導(dǎo)致效率的低下,因此jQuery 1.8將不建議使用該行為。
jQuery 1.9
下面是1.9版的規(guī)劃,該版本將于2013年初發(fā)布。
XSS防護(hù)
根據(jù)設(shè)計(jì),$()方法可以創(chuàng)建HTML元素并運(yùn)行腳本(如果傳遞進(jìn)來的是<script>標(biāo)簽)。但開發(fā)者有時(shí)會(huì)忘記這一點(diǎn),將來自不受信任源的字符串傳遞給jQuery,這會(huì)導(dǎo)致跨站腳本(XSS)攻擊。在jQuery 1.9中,對(duì)$()方法來說“看起來像是HTML”的規(guī)則將會(huì)得到更加嚴(yán)格的處理。一個(gè)字符串只有第一個(gè)字母是小于號(hào)才會(huì)被當(dāng)作是HTML,否則就會(huì)被當(dāng)作是CSS選擇器。由于根據(jù)這些更加嚴(yán)格的規(guī)則,某些HTML字符串將無法被$()識(shí)別出來,因此請(qǐng)確保在使用該功能時(shí)仔細(xì)檢查你的代碼,也可以使用$.parseHTML作為替代函數(shù)。
移除$.browser與$.sub
從jQuery 1.3開始,$.browser就不建議被使用了,并且將于jQuery 1.9被移除。還在使用$.browser的開發(fā)者應(yīng)該看看$.support或Modernizr以進(jìn)行特性檢測(cè)。其他選擇有使用jQuery 1.9 compatibility插件、或是直接讀取navigator.userAgent字符串。
從jQuery 1.7開始,$.sub就不建議被使用了,并且將于jQuery 1.9被移除。該函數(shù)會(huì)創(chuàng)建jQuery的一個(gè)新副本,其屬性與方法可以被修改,同時(shí)又不會(huì)影響到原來的jQuery對(duì)象。事實(shí)證明,該函數(shù)并不是那么有用,因此將會(huì)被移到1.9 compatibility插件中。我們期望在移除掉這么多不建議使用的條目后,jQuery 1.9的文件尺寸能夠變得更小一些。
jQuery 2.0
下面是2.0版的規(guī)劃,該版本將于2013年初發(fā)布,就在jQuery 1.9發(fā)布之后不久。
移除對(duì)IE6/IE7/IE8的支持
jQuery 2.0所支持的APIs與jQuery 1.9一樣。它并不會(huì)增加什么主要的特性,但卻會(huì)移除對(duì)IE 6/7/8怪癖的支持,比如說臭名昭著的事件模型、IE7的“attroperties”、HTML5 shims等等。1.9與2.0的目標(biāo)是對(duì)于他們所支持的API來說能夠?qū)崿F(xiàn)互換。jQuery 2.0將會(huì)更小、更快,同時(shí)不再有為了支持IE6/7/8所引入的那些問題。如果需要支持IE6/7/8,那么請(qǐng)選擇1.9;否則,你既可以使用1.9也可以使用2.0。你還可以通過條件注釋在使用IE6/7/8時(shí)只包含進(jìn)1.9。
<!--[if lt IE 9]> <script src="jquery-1.9.0.js"> <![endif]--> <!--[if gte IE 9]><!--> <script src="jquery-2.0.0.js">< <!--
即便在jQuery 2.0發(fā)布后,jQuery團(tuán)隊(duì)也將會(huì)繼續(xù)支持和維護(hù)1.9,只要IE6/7/8的影響還在就不會(huì)停止對(duì)其的支持。jQuery團(tuán)隊(duì)并未計(jì)劃未來添加大量的新APIs,新的功能將會(huì)以兼容于1.9與2.0的插件的形式添加進(jìn)來。
要想了解更多信息,請(qǐng)閱讀jQuery 1.8 Beta 1: See What's Coming (And Going!)與jQuery Core: Version 1.9 And Beyond。