已經(jīng)過時了。
略做點補充:
Zepto也是過時貨了。還有Underscore/Lodash等,也是過時了。
但是過時不代表你就一定不可以再用,或者要從現(xiàn)有項目中清除拋棄掉。項目維護和管理本身是另一回事情,并不是完全由技術(shù)因素決定的。
下面稍微講下為什么已經(jīng)過時。說這個你得知道jQuery提供的核心價值是什么。
我總結(jié)有幾點:
1. 發(fā)揚光大了$和CSS選擇器的天才idea(盡管都不是發(fā)明者)
2. 處理瀏覽器的兼容性問題和各種bug
3. 鏈式調(diào)用為核心的DSL(此為jQuery獨創(chuàng))
4. 基于jQuery的生態(tài)(大量插件,各種工具如IDE也對其有良好支持)
看一下前兩點,
1. 新的DOM標準(借鑒jQuery)加入了許多新的方法,覆蓋了絕大部分use cases;
2. 目前主流瀏覽器的兼容性已經(jīng)大幅提高,且因為都是Evergreen browsers了,所以以后也不太會出現(xiàn)嚴重的兼容性問題了;此外新標準比以往要更詳盡清晰,出現(xiàn)不一致和bug的機率也小了;
實際上這前兩點也不是一蹴而就的,而是一直在改進。比如原生querySelector API普及之后,才出現(xiàn)了Zepto。只不過這兩年發(fā)展加速,以至于Zepto還沒取代jQuery,就要一起過時了。
當然,現(xiàn)在仍然有兼容性問題,比如老瀏覽器不支持那些新的DOM方法,還有bug問題始終會有的。怎么辦?我四年前寫的《關(guān)于國內(nèi)前端和JS技術(shù)發(fā)展的亂想》就給出了答案:
另外一個我認為非常廣闊的領(lǐng)域是dom。是的,始終是。
盡管我之前說過了,大框架沒有機會。但是注意到一點,jQuery等仍然是建立在前ES5前HTML5時代的。因此那些庫其實都干了大量重復(fù)的事情。真正有益的是把這些事情做一次,做好它,怎么做好?不是發(fā)明各種自己的api,而是大家努力按照html5的規(guī)范,去盡量實現(xiàn)一套一致的符合html5語義的底層dom api。
……
以html5規(guī)范和語義為準。時刻記得避免夾帶私貨。此庫的最高境界是只作為給瀏覽器打patch用,也就是一個patch框架加patch實現(xiàn)。
2011年時polyfill這個詞還沒怎么流行,但是你們可以看到我講的就是polyfill。不同的是,當時可能還比較前衛(wèi)的理念,4年后的今天,幾乎所有新API都有polyfill/shim實現(xiàn),所以不再僅僅是理念,而已經(jīng)有大量非常成熟的實踐了。
但直到去年,我一直沒說可以拋棄jQuery,那就是因為第三點(基于鏈式調(diào)用的DSL)。即使新的query接口已經(jīng)直接返回Element數(shù)組,因此可鏈式調(diào)用forEach/map之類的方法,但總體上,標準DOM API體系仍然無法像jQuery一樣提供一致且(插件)可擴展的鏈式調(diào)用DSL。