You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用$()访问同一元素时jQuery是否每次都遍历DOM?

$('button').click(function() {
  $('.child').append('Text. ');
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<button>Add text</button>

<div class="parent5">
  <div class="parent4">
    <div class="parent3">
      <div class="parent2">
        <div class="parent1">
          <div class="child">
          </div>
        </div>
      </div>
    </div>
  </div>
</div>

1. 点击按钮后的jQuery查询逻辑

你给出的示例代码中,每次触发点击事件调用$('.child')时,jQuery都会从document根节点重新遍历整个DOM匹配符合类名的元素。jQuery本身没有默认缓存选择器查询结果的机制,每次调用$()选择器方法都会发起一次全新的DOM查询。

2. var childElement = $('.child')的访问有效性

这种写法不能保证总能访问到目标子元素:

  • 如果你执行赋值代码时,.child元素已经完成渲染加载到DOM树中,那childElement会存储本次查询匹配到的所有.child元素对应的jQuery对象,后续直接操作这个变量就不用重新查询DOM。但要注意这个存储的对象是静态的:如果后续DOM更新删除了原来的.child,或者新增了其他.child元素,已经赋值的childElement不会自动同步更新,还是指向你当初查询到的元素集合。
  • 如果你执行赋值代码时.child还没渲染到DOM中(比如脚本放在页面头部,没有等待DOM加载完成就执行查询),那childElement会是一个空的jQuery对象,无法操作到目标元素。

3. 缓存jQuery对象的行业实践

把jQuery对象存储到变量中是使用jQuery时非常普遍的最佳实践,尤其是针对需要频繁访问的元素。这种做法可以大幅减少重复DOM查询带来的性能开销,尤其在DOM结构复杂、选择器匹配成本高的场景下优化效果非常明显。业界通常还会给存储jQuery对象的变量加上$前缀作为标识,方便和普通JS变量区分,比如const $child = $('.child')。

内容的提问来源于stack exchange,提问作者noob_coder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 21:24:03