在jQuery中使用find()而不是>对于子选择器更有效吗?

在jQuery中,我认为使用具有如下实现1的特定选择器来查找子DOM将更有效:

var $dataTable = $('#' + tabId + ' > div.container > div.dataTableContainer > table.dataTable'); 

但我的一位朋友告诉我,使用实施2时效率会更高:

 var dataTable = $('#' + tabId).find('table.dataTable'); 

参考其他问题 ,我发现实施2可能效率低于:

 var $dataTable = $('#' + tabId + ' div.container div.dataTableContainer table.dataTable'); 

实施2是否会比实施1更有效?

具有直接后代选择器的document.querySelector()是最快的, .find()是最慢的。

 var tabId = "abc"; console.time(".find()"); var $dataTable = $('#' + tabId).find('table.dataTable'); console.timeEnd(".find()"); console.time("jQuery(), >"); var $dataTable = $('#' + tabId + ' > div.container > div.dataTableContainer > table.dataTable'); console.timeEnd("jQuery(), >"); console.time("document.querySelector()"); var $dataTable = document.querySelector('#' + tabId + ' div.container div.dataTableContainer table.dataTable'); console.timeEnd("document.querySelector()"); console.time("document.querySelector(), >"); var $dataTable = document.querySelector('#' + tabId + ' > div.container > div.dataTableContainer > table.dataTable'); console.timeEnd("document.querySelector(), >"); 
  

我的猜测

在引擎盖下$('#XXX whatever')执行原生document.queryselectorAll() ,它将检查文档中的所有元素 ,看它们是否匹配’ #xxx whatever

$('#XXX').find('whatever')首先执行document.getElementById('XXX') ,找到id="XXX"的元素,然后在该元素中执行queryselectorAll() ,因此子项较少要测试的元素,看它们是否匹配“ whatever

但这种猜测完全被实际数据否定 – 请参阅@ guest271314的答案