html5推出queryselectall之後,jQuery的作用是否減小了?

jQuery就是javascript和query(查詢),html5推出queryselectall之後,可以更快的使用選擇器查詢了,jQuery的必要性是不是就沒那麼強了?


題主的說法是對的,必要性顯然是減小了。DOM 的介面每方便一點,引入 jQuery 的優勢就減小一點。優勢減小不等於沒用嘛。


參考這個:jQuery會過時嗎? - 賀師俊的回答


首先要弄清楚,querySelectorAll返回的是原生的元素集合,而jQuery的$函數返回的是jQuery對象。大家之所以更願意用jQuery,很大程度上是因為jQuery對象則提供了一系列簡單的DOM操作介面。

以「查詢所有.section元素,並將其移除」這個功能為例。如果用querySelectorAll,得這麼寫:

var sections = document.querySelectorAll(".section");
for (var i = sections.length - 1; i &>= 0; i--) {
sections[i].parentNode.removeChild(sections[i]);
}

如果用jQuery,是這麼寫:

$(".section").remove();

哪個簡單一目了然。

jQuery中實現選擇器查詢的部分叫做Sizzle。Sizzle支持的選擇器又比querySelectorAll豐富。例如:

document.querySelectorAll("div:odd");

這行代碼會拋出異常,因為不支持這個選擇器。而使用jQuery則沒有問題:

$("div:odd");

可能你會說,我根本用不到這樣的選擇器。的確如此,所以只能說querySelectorAll是一種相對簡單、高性能的解決方案,可以應對一般的選擇器查詢。但是一旦出現了複雜的查詢,還是得用到jQuery(Sizzle)。

另外,querySelectorAll其實是「有BUG」的。

&
&&
&
&&
& & &
console.dir( document.querySelector("#container").querySelectorAll("div span") );
&

以上代碼,查詢到的span應該只有id為c的那個,但實際上兩個span都被查詢出來了。雖然Sizzle內部實現上也調用了querySelectorAll,但是就解決了這個BUG。


單就選擇器來說,jquery的作用減小了。

沒有querySelector和querySelectorAll之前,DOM提供的selector功能太有限,getElementById只能取ID,getElementsByTagName只能取節點的名字,getElementsByClassName只能取class名稱。要完成複雜的選擇器「.className .subclassName p &> a」要寫很多代碼才行。然後JS的框架出現了,css selector逐漸被實現成DSL,querySelector和querySelectorAll把各種框架都支持的css selector port進了DOM,客觀上所有框架的這部分功能的作用都減小了;至少複雜的DOM操作,jquery等不是必然選擇了。


Sizzle 2000行, jQuery 9000行,你覺得能一樣么


題主要想清楚一個事情,jq不光光是提供了更好用的介面,最關鍵還是兼容性的問題


Sizzle懂了的話,就不這麼看了


對於用原生的人方便不少,但是對於不同瀏覽器的差異,jq,zepto。。 始終需要。。


如果你去看一下jquery的查詢引擎sizzle的代碼,它內部本來就使用了querySelectorAll,用sizzle的好處自然是更多的功能和更好的封裝


jquery分為

1.x還有2.x版本,很大一個區別就是選擇器直接採用了querySelectorAll


jQuery not only query.


推薦閱讀:

babel@6.2.0預編譯的ES6代碼無法在IE8上愉快的運行,各位前輩有辦法嗎?
到 2013 年底,WebGL 能發展到什麼程度?
macOS Sierra 官網的視覺差動畫是如何實現的?
為什麼把 Script 標籤放在 body 結束標籤之後 html 結束標籤之前?
如何解決自定義變數名和 jQuery 的 $ 標識的衝突?

TAG:HTML | JavaScript | 編程 | HTML5 | jQuery |