Q.jsCSS 選擇器
1, 和Sizzle的兼容
Q(expr, context, result, seed)
Q.matches
支持Sizzle特別的setFilter偽類如:even,:first,:last,:lt...
支持復(fù)雜的:not和:has選擇器(和sizzle一樣)
2, 結(jié)果的正確性
Sizzle在某些選擇器上由于查詢策略的原因,會返回錯(cuò)誤的結(jié)果
考慮在這樣的html上查詢
"<div/><h1/><h1/><div/>"
查詢 div~div : 應(yīng)返回1個(gè)節(jié)點(diǎn)
查詢 h1~div: 應(yīng)返回1個(gè)節(jié)點(diǎn)
查詢 div+h1~div: 應(yīng)返回一個(gè)節(jié)點(diǎn),但是Sizzle沒有找到節(jié)點(diǎn)
另外
div.querySelectorAll("body *")會返回節(jié)點(diǎn)
所以在以元素為context的查詢中不使用querySelectorAll進(jìn)行優(yōu)化
3, 性能
將選擇器編譯成函數(shù)再進(jìn)行查詢,除了第一次查詢需要jit編譯之外,以后每次查詢都是最快的速度
查詢策略引擎會分析選擇器的組成,選擇最恰當(dāng)?shù)牟樵儾呗裕◤拈_始查還是從末尾查還是從中間開始)
排除不必要的運(yùn)算,如sizzle中的:lt偽類,這里查詢時(shí)找夠節(jié)點(diǎn)就會跳出查詢,不會繼續(xù)做無謂的查詢
評論
圖片
表情
