在jQuery中,每当遇到这样的事情:
$("div#MyDiv").....
我一般对开发者说:“不要把div放在#MyDiv的前面,ID选择器是最快的.”即
$("#MyDiv")....
这是因为后者将直接钩入document.getElementById,而不必扫描所有< div>的DOM.元素第一.
我的问题是,同样的规则适用于CSS选择器吗?即而不是:
div#MyDiv { }
简单来说是更快吗?
#MyDiv { }
(我意识到,CSS选择器是非常快的反正,所以在现实中也不会有显着差异.)
非常感谢
编辑
任何链接或引用可能对本讨论的目的有用.谢谢 :-)
解决方法
我会说,它是不太可能使任何现实世界的区别.在理论上,是的,需要少一个检查(因为div#foo真的需要一个div来匹配选择器,根据
the spec).但是在现实世界的浏览器应用程序中,它的几率有何不同呢?接近零.
也就是说,当我在HTML应用程序中看到像div#foo这样的东西时,我总是很沮丧. HTML只有一个ID类型属性(id),因此不需要进一步的资格.您使CSS选择器引擎(浏览器或jQuery的)更难以弄清楚您的意思,使选择器变得脆弱(例如,如果div成为页脚)等等,当然您也可以自己打开到一个stoopid选择器实现,无法识别它可以看看ID的东西,然后检查,看看它是否是一个div,所以去查看所有的div. (这样的实现是否存在?可能,你永远不会知道.)除了一些边缘案例,总是让我认为某人不太了解他们在做什么.
所以对我来说,速度不是主要的论据.无意义是.