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

根据评分修改星级<i>元素背景色:现有JS代码故障求助

解决星级评分低于3时修改元素背景色的问题

首先,我发现你代码里有个很容易导致整个JS失效的关键问题:jQuery的引用脚本放在了自定义代码之后,浏览器执行你的星级评分代码时,jQuery还没加载完成,$会被识别为未定义,直接触发报错让代码停止运行。所以第一步必须把jQuery的<script>标签移到自定义JS代码的前面。

接下来针对你要实现的“评分低于3时修改元素背景色”的需求,我们可以在生成星星元素后,添加一个条件判断逻辑来动态修改样式。这里要提一句:Material Icons是字体图标,通常我们会修改color属性改变图标颜色,但如果你确实需要背景色,也可以设置background-color(配合padding、border-radius这类样式会让效果更自然)。

以下是修改后的完整可用代码:

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script>
$.fn.stars = function() { 
  return $(this).each(function() { 
    var rating = $(this).data("rating"); 
    var numStars = $(this).data("numStars"); 
    
    // 生成各类星星的HTML字符串
    var fullStar = new Array(Math.floor(rating + 1)).join('<i class="material-icons">star</i>'); 
    var halfStar = ((rating % 1) !== 0) ? '<i class="material-icons">star_half</i>' : ''; 
    var noStar = new Array(Math.floor(numStars + 1 - rating)).join('<i class="material-icons">star_border</i>'); 
    
    // 将星星插入到当前评分元素中
    $(this).html(fullStar + halfStar + noStar); 
    
    // 核心逻辑:评分低于3时修改<i>元素样式
    if (rating < 3) {
      $(this).find('i').css({
        'background-color': '#ffecec', // 浅红色背景
        'padding': '2px', // 增加内边距让背景更明显
        'border-radius': '2px' // 圆角优化视觉效果
      });
      // 如果你想修改的是图标颜色,替换成下面这行即可:
      // $(this).find('i').css('color', '#ff5555');
    }
  }); 
}
$('.stars').stars();
</script>

<!-- 测试示例 -->
<span class="stars" data-rating="2.5" data-num-stars="5"></span>
<span class="stars" data-rating="4" data-num-stars="5"></span>

关键修改点说明:

  • 修正脚本加载顺序:把jQuery引用移到自定义JS之前,确保$能被正常识别,避免代码因未定义报错失效。
  • 新增评分判断逻辑:在星星元素生成并插入DOM后,通过if (rating < 3)判断评分等级,再选中当前元素下的所有<i>标签修改样式。
  • 样式细节优化:给背景色搭配了内边距和圆角,让视觉效果更协调,你可以根据自己的设计需求调整这些样式值。

这样修改后,既解决了代码失效的问题,也完美实现了你想要的评分低于3时修改元素样式的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:05:55