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

如何用JS点击js--i类li元素切换箭头图标类?多实例需遍历吗?

切换下拉/上拉箭头图标的实现方案

嘿,其实不用特意遍历所有子元素哒!你的需求很明确——点击每个带.js--i类的<li>,切换它内部箭头的ion-android-arrow-dropdown和ion-android-arrow-dropup类,而且页面存在多个这类实例,我给你分享两种简洁的实现方式:

核心思路

每个.js--i的<li>里只会有一个箭头图标(<i>标签),所以我们只需要在点击li时,精准定位到它下面的那个<i>元素,直接切换两个类即可,完全不需要遍历所有子元素。

代码实现

1. 直接给每个目标元素绑定点击事件

这种方式适合页面元素固定、不会动态新增的场景:

<!-- 示例HTML(多个实例) -->
<li class="js--i">
  <a href="#" id="sub-menu--parent-1">About Us <i class="ion-android-arrow-dropdown"></i></a>
</li>
<li class="js--i">
  <a href="#" id="sub-menu--parent-2">Our Services <i class="ion-android-arrow-dropdown"></i></a>
</li>
// 获取所有带.js--i类的li元素
const toggleItems = document.querySelectorAll('.js--i');

// 给每个li绑定点击事件
toggleItems.forEach(item => {
  item.addEventListener('click', function(e) {
    e.preventDefault(); // 阻止a标签默认跳转行为
    // 精准找到当前li下的i元素
    const arrowIcon = this.querySelector('i');
    // 切换两个箭头类
    arrowIcon.classList.toggle('ion-android-arrow-dropdown');
    arrowIcon.classList.toggle('ion-android-arrow-dropup');
  });
});

2. 事件委托(更推荐,支持动态新增元素)

如果页面后续会动态添加.js--i的li,用事件委托更高效,只需要给父容器绑定一次事件:

// 假设父容器是ul(根据你的实际DOM结构调整)
document.querySelector('ul').addEventListener('click', function(e) {
  // 找到触发事件的目标li(点击a标签或i标签都能定位到对应的li)
  const targetLi = e.target.closest('.js--i');
  if (targetLi) {
    e.preventDefault();
    const arrowIcon = targetLi.querySelector('i');
    arrowIcon.classList.toggle('ion-android-arrow-dropdown');
    arrowIcon.classList.toggle('ion-android-arrow-dropup');
  }
});

为什么不用遍历子元素?

querySelector会在当前元素的范围内查找匹配的子元素,我们直接用this.querySelector('i')或者targetLi.querySelector('i'),就能精准拿到当前li下的箭头图标,不用循环遍历所有子节点,代码简洁又高效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:47:24