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

Jav*_*kid 15 javascript jquery

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

var $dataTable = $('#' + tabId + ' > div.container > div.dataTableContainer > table.dataTable');
Run Code Online (Sandbox Code Playgroud)

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

var dataTable = $('#' + tabId).find('table.dataTable');
Run Code Online (Sandbox Code Playgroud)

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

var $dataTable = $('#' + tabId + ' div.container div.dataTableContainer  table.dataTable');
Run Code Online (Sandbox Code Playgroud)

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

gue*_*314 16

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(), >");
Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="abc">
  <div class="container">
    <div class="dataTableContainer">
      <table class="dataTable">
        <tbody>
          <tr>
            <td></td>
          </tr>
        </tbody>
      </table>
    </div>
  </div>

</div>
Run Code Online (Sandbox Code Playgroud)

  • 你的测试仍然偏向于使用`document.querySelector()`你返回DOM节点,而不是jq set.所以你仍然应该将结果包装在jq对象中以进行更相关的比较.虽然它仍然会轻微肥胖,但没有什么比使用它更合理了,imho.更好的是获得可读代码而不是一些可以让你赢得微秒的代码 (4认同)