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

Font Awesome与Bootstrap场景下循环内点击按钮切换span类名咨询

实现方案

首先你的现有模板代码存在重复ID的问题,id="StarIcon"在循环中会生成多个相同ID的元素,不符合HTML规范,也会影响元素选择,建议先移除重复ID,给按钮添加统一的类名用于事件绑定。


最优方案:点击对应按钮仅修改自身内部span类

调整后的模板代码

{% for i in X %}
    <button id="{{i.id}}" class="star-btn">
        <span class="class1"></span>
    </button>
{% endfor %}

原生JS实现

document.addEventListener('DOMContentLoaded', function() {
  const starBtns = document.querySelectorAll('.star-btn');
  starBtns.forEach(btn => {
    btn.addEventListener('click', function() {
      const targetSpan = this.querySelector('span');
      // 单次修改:把class1替换为class2
      targetSpan.classList.replace('class1', 'class2');
      // 如果需要来回切换两种状态,把上面一行替换为下面两行即可
      // targetSpan.classList.toggle('class1');
      // targetSpan.classList.toggle('class2');
    })
  })
})

jQuery实现

$(function() {
  $('.star-btn').click(function() {
    // 单次修改
    $(this).find('span').removeClass('class1').addClass('class2');
    // 切换状态可改为:$(this).find('span').toggleClass('class1 class2');
  })
})

备选方案1:修改所有按钮内的span类

原生JS实现

document.querySelectorAll('button span.class1').forEach(span => {
  span.classList.replace('class1', 'class2');
})

jQuery实现

$('button span.class1').removeClass('class1').addClass('class2');

备选方案2:仅修改最后一个按钮内的span类

原生JS实现

const allStarSpans = document.querySelectorAll('button span.class1');
if (allStarSpans.length) {
  allStarSpans[allStarSpans.length - 1].classList.replace('class1', 'class2');
}

jQuery实现

$('button span.class1:last').removeClass('class1').addClass('class2');

补充说明

如果你是要切换Font Awesome的空心/实心星标,直接把class1设为far fa-star(空心星)、class2设为fas fa-star(实心星)即可直接生效,无需额外配置样式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 07:45:06