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

如何使用jQuery统一访问带有序列ID的页面元素?

嘿,碰到这种重复写10遍几乎一模一样的代码,确实挺头疼的,咱们可以用几种简洁的方式来重构,让代码更易维护:

方法1:利用ID前缀选择器匹配所有目标元素

jQuery支持属性前缀选择器[id^="set"],它能选中所有id以set开头的元素。然后我们通过$(this)来定位当前触发事件的.select元素,再操作它内部的子元素,这样就不用为每个setN单独写逻辑了:

$('.element [id^="set"] .select').on('mouseleave', function() {
  // 缓存当前触发事件的.select元素,避免重复DOM查找
  const $currentSelect = $(this);
  const $options = $currentSelect.find('.options');
  
  if ($options.is(':visible')) {
    $options.slideUp('fast');
    $currentSelect.find('a.value').addClass('selected').text('1');
  }
});

这里的[id^="set"]会匹配set1到set10所有元素,$(this)保证我们只操作当前鼠标离开的那个.select对应的子元素,不会影响其他模块。

方法2:添加统一类名(更推荐的语义化方案)

如果能修改HTML的话,给所有set1到set10的元素加一个共同的类,比如set-group,这样选择器更清晰,性能也比属性选择器更好:

修改后的HTML示例:

<div class="element">
  <div id="set1" class="set-group">
    <div class="select">...</div>
  </div>
  <div id="set2" class="set-group">
    <div class="select">...</div>
  </div>
  <!-- ... 其他set3到set10的结构 -->
</div>

简化后的JS代码:

$('.element .set-group .select').on('mouseleave', function() {
  const $currentSelect = $(this);
  const $options = $currentSelect.find('.options');
  
  if ($options.is(':visible')) {
    $options.slideUp('fast');
    $currentSelect.find('a.value').addClass('selected').text('1');
  }
});

这个方案的好处是语义化更强,以后新增set11、set12这类元素,只要加上set-group类,JS代码完全不用修改,扩展性拉满。

小提示:缓存jQuery对象

上面代码里我们把$(this)、$options都缓存成变量了,这样可以避免重复查找DOM节点,提升代码运行性能,这个小技巧平时写jQuery代码时可以多用上~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:32:34