Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 这些选择器中哪一个可能更快?_Javascript_Jquery_Performance_Selector - Fatal编程技术网

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,只要明确地说它在那里,你就可以不再担心了。