我正在開發我的個人項目,即創建JavaScript選擇器引擎。引擎會使用CSS2 - CSS3語法來選擇元素節點。我將我的引擎的選擇結果與其他選擇器引擎的結果(主要是Sizzle)進行比較。我還將其與本機選擇器方法(稱爲querySelectorAll(QSA))進行了比較。我注意到一個區別。Javascript - 通過排序DOM集合獲得的好處
該文件的HTML結構是如此簡單:
<code><span></span></code>
我使用的選擇器是:
'跨度,代碼'
當我使用Sizzle或QSA進行選擇,我得到的結果是這樣的:
[<code>...</code>, <span></span>]
當我用我的選擇器引擎,結果是這樣的:
[<span></span>, <code>...</code>]
這似乎是,這種嘶嘶聲和QSA根據元素的文件上的位置排序的集合。我的選擇器引擎不這樣做。我發現,使用compareDocumentPosition和Array排序方法可以實現排序。顯然這會影響性能,雖然我還沒有測試過。 (來源:http://ejohn.org/blog/comparing-document-position/)。
我想知道如果排序節點提供了一些好處,比「無序」的節點。例如,將元素排序後,向集合的節點添加css樣式效率更高(在循環中)。還有其他的情況,使用排序後的集合可能會更好嗎?
實施例(elementNodes包含的選擇結果):
爲(VAR I = 0,IL = elementNodes.length;我< IL;我++){
elementNodes[i].style.height = '100px'; elementNodes[i].style.width = '100px'; elementNodes[i].style.background = 'red';
}
任何源代碼? :-) –
我相信排序節點的唯一優點是可預測性,這是不可嗅探的... – lonesomeday
@FlorianMargaine什麼是源代碼?對元素集合進行排序的方法可以從我給出的鏈接中找到(這是John Resig的真棒博客中的一篇文章),我太羞愧了,無法從我的選擇器引擎中顯示代碼:D我不太擅長編寫漂亮的代碼。 – undefined