我正在从事我的个人项目,即创建一个javascript选择器引擎。引擎将使用CSS2 - CSS3语法来选择元素节点。我是比较我的引擎的选择结果与其他选择引擎的结果(主要是Sizzle)。我还将其与称为querySelectorAll (QSA)的本机选择器方法进行了比较。我注意到一个不同之处。
文档的HTML结构非常简单:
<code><span></span></code>
我使用的选择器是:
'span,代码‘
当我使用Sizzle或QSA执行选择时,我得到的结果是:
[<code>...</code>, <span></span>]
当我使用选择器引擎时,结果是:
[<span></span>, <code>...</code>]
看起来,Sizzle和QSA根据元素在文档中的位置对集合进行排序。我的选择引擎不这样做。我发现,排序可以使用compareDocumentPosition和数组排序方法来实现。显然,这会对性能产生一定的影响,尽管我还没有测试它。(来源:http://ejohn.org/blog/comparing-document-position/)
我想知道排序节点是否比“未排序”节点提供了一些好处。例如,当元素被排序时,将css样式添加到集合的节点(在循环中,即)会更有效吗?在其他情况下,使用排序集合可能更好吗?
示例(elementNodes包含选择结果):
for (var i= 0,il = elementNodes.length;i< il;i++) {
elementNodesi.style.height =‘100 red’;elementNodesi.style.width =‘100 red’;elementNodesi.style.background = 'red';
}
发布于 2012-05-21 08:29:24
首先,我喜欢您在这里所做的工作,特别是您正在与其他开源引擎进行比较。
实际上,这两个例子都是“排序”不同的。
除非你找到一个令人信服的理由(我想不出一个),你的排序方式和你的热情一样,那就不要这么做。只要你明白你自己的引擎的顺序,这一点你很清楚,其他人也能理解,那么这才是最重要的。
https://stackoverflow.com/questions/10687973
复制相似问题