CSS 選擇器:Q.js

jopen 12年前發布 | 22K 次閱讀 CSS 前端技術

1, 和Sizzle的兼容
Q(expr, context, result, seed)
Q.matches
支持Sizzle特別的setFilter偽類如:even,:first,:last,:lt...
支持復雜的:not和:has選擇器(和sizzle一樣)

2, 結果的正確性
Sizzle在某些選擇器上由于查詢策略的原因,會返回錯誤的結果
考慮在這樣的html上查詢
"<div/><h1/><h1/><div/>"
查詢 div~div : 應返回1個節點
查詢 h1~div: 應返回1個節點
查詢 div+h1~div: 應返回一個節點,但是Sizzle沒有找到節點

另外
div.querySelectorAll("body *")會返回節點
所以在以元素為context的查詢中不使用querySelectorAll進行優化

3, 性能
將選擇器編譯成函數再進行查詢,除了第一次查詢需要jit編譯之外,以后每次查詢都是最快的速度
查詢策略引擎會分析選擇器的組成,選擇最恰當的查詢策略(從開始查還是從末尾查還是從中間開始)
排除不必要的運算,如sizzle中的:lt偽類,這里查詢時找夠節點就會跳出查詢,不會繼續做無謂的查詢

項目主頁:http://www.baiduhome.net/lib/view/home/1351003204055

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!