一对夫妇的实际问题,这些选择器中的哪一个可能会更快?
鉴于以下两个将回到同一个结果集
$("#MyTable tr");
$("tr", "#MyTable");
有在使用父子CSS选择器公约或指定上下文之间的任何性能差异而不是选择?
另外,考虑到我可以保证一个tr将是一个表的直接孩子,这会改善上述表现吗?
$("#MyTable>tr")
一对夫妇的实际问题,这些选择器中的哪一个可能会更快?
鉴于以下两个将回到同一个结果集
$("#MyTable tr");
$("tr", "#MyTable");
有在使用父子CSS选择器公约或指定上下文之间的任何性能差异而不是选择?
另外,考虑到我可以保证一个tr将是一个表的直接孩子,这会改善上述表现吗?
$("#MyTable>tr")
到目前为止,最快的三个是:
$("#MyTable > tr")
因为你是选择由编号的元素参考的直系后裔,所以选择是很直接的。
编辑:@redsquare指出,上述功能不适用于Firefox和Chrome浏览器,因为这些浏览器会将tbody元素附加到表格中。
背景选择器被基本上转化为“查找”,所以最慢的第2的是:
$("tr", "#MyTable");
,因为它被转化成像这样之前的任何选择发生:
$('#MyTable').find('tr');
当然,如果你自己做基准测试,这可能对你有很大的好处。
这里是以前问的SO一些相关的问题:
“因为我可以保证TR将是一个表的直接子” - 不要赌。浏览器应该(除了XHTML模式)暗示表和表行之间的tbody元素。 – Quentin 2009-08-19 10:33:28
@David Dorward - 公平的评论。虽然如果我们不能做出这个基本的假设,那么不会产生这个选择器,而.children()函数是多余的? – 2009-08-19 10:43:12
不需要。它只是意味着在处理含有隐式开始标记的元素时需要小心。人们通常不会将开始标签包含在内的是tbody,只是明确表示它在那里,您可以不用担心。 – Quentin 2009-08-19 13:25:22