使用find()而不是>是否更有效率?在jQuery中的子选择器?

时间:2016-10-12 08:23:28

标签: javascript jquery

在jQuery中,我认为使用 Implementation 1 找到具有特定选择器的子DOM会更有效:

this.mygrid.setOptions({source:{}}); or new DataAdapter

但我的一位朋友告诉我,使用它会更有效率 实施2 如下:

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

引用other question,我发现实施2可能效率低于:

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

实施2 会比实施1 更有效吗?

2 个答案:

答案 0 :(得分: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(), >");
<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>

答案 1 :(得分:3)

我的猜测

幕后$('#XXX whatever')执行原生document.queryselectorAll(),会检查文档中的所有元素,看看它们是否匹配“#xxx whatever”< / p>

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

但真实数据完全否定了这种猜测 - 请参阅@ guest271314的答案