框架选择器引擎通常是右手先评估的,因此我期望上下文ID选择器为document.getElementById
的ID,然后通过加大parentNode
来检查结果是否在上下文节点中。这是相当快的,但它不适用于像这个例子那样的文档外DOM树。然后,选择器引擎将不得不以极其缓慢的方式执行它,或者不在意(例如,Sizzle不能与DocumentFragment
一起使用)。
有一个更好的方法,让我从那以后,为实现Selectors-API(IE8,Firefox 3.5,Opera 10,Safari 3.1,Chrome 3)的浏览器记得一个片段。您可以使用querySelector
应用与DocumentFragment
作为上下文节点的CSS选择器,因为API需要DocumentFragment
工具NodeSelector
:
alert(frag.querySelector('#myId'))
这是不太一样快getElementById
,但它的负载比DOM版本更好。
不幸的是,大多数具有选择器API优化的框架在这种情况下不会使用它们,或者任何其他使用上下文节点的框架都不会使用它们,因为上下文节点的工作方式与框架传统上实现它的方式不同,使他们不相容。
Selectors-API Level 2提出了类似于传统框架选择器的'scoped'方法......在可用之前还需要一段时间,但在此之前我们可能不会在现有框架中看到优化的上下文选择器。我认为这是一种遗憾,因为虽然使用上下文节点进行过滤但未进行范围界定的方法并不完善,但它仍然非常适用于所有常见情况。
你不应该觉得奇怪。紧随代码之后,他明确建议不要使用它,“跟着参考,跟踪引用几乎肯定会更好,而不是像上面那样依赖于一个天真,表现不佳的函数。” – 2010-01-29 22:33:15
令人惊讶的是,顺序或数量:1000.我预计在2到100之间。 – Olivvv 2010-01-29 22:40:47