Javascript 这些选择器中哪一个可能更快?
实际上有几个问题 假设以下两个将返回相同的结果集Javascript 这些选择器中哪一个可能更快?,javascript,jquery,performance,selector,Javascript,Jquery,Performance,Selector,实际上有几个问题 假设以下两个将返回相同的结果集 $("#MyTable tr"); $("tr", "#MyTable"); 使用父子CSS选择器约定还是为选择器指定上下文在性能上有什么区别 此外,鉴于我可以保证tr将是表的直接子级,这是否会改善上述性能 $("#MyTable>tr") 到目前为止,这三者中最快的是: $("#MyTable > tr") 由于您是通过id选择元素引用的直接后代,因此选择相当直接 EDIT:@redsquare指出,上述内容在Firefox和
$("#MyTable tr");
$("tr", "#MyTable");
使用父子CSS选择器约定还是为选择器指定上下文在性能上有什么区别
此外,鉴于我可以保证tr将是表的直接子级,这是否会改善上述性能
$("#MyTable>tr")
到目前为止,这三者中最快的是:
$("#MyTable > tr")
由于您是通过id选择元素引用的直接后代,因此选择相当直接
EDIT:@redsquare指出,上述内容在Firefox和Chrome中不起作用,因为这些浏览器会在表中附加一个tbody元素
上下文选择器基本上转换为“查找”,因此前两个中最慢的是:
$("tr", "#MyTable");
在进行任何选择之前,它会转换为类似的内容:
$('#MyTable').find('tr');
当然,自己对这些进行基准测试可能会对您有很大的好处
以下是之前就SO提出的一些相关问题:
$(“#MyTable>tr”)
可能无法实际工作,因为您应该将ad/tfoot或tbody作为表的直接子级。我认为ff/chrome etc将为您添加tbody,因此选择器应为
$("#MyTable > tbody > tr")
“鉴于我可以保证tr将是一张桌子的直接孩子”——不要打赌。浏览器应该(在XHTML模式下除外)在表和表行之间暗示一个tbody元素。@David Dorward-Fair comment。尽管我们不能做出这样的基本假设,但这不会使选择器和.children()函数变得多余吗?不会。这只是意味着在处理带有隐式开始标记的元素时需要小心。唯一一个人们经常不包括开始标签的是tbody,只要明确地说它在那里,你就可以不再担心了。