根据评分修改星级<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
相关产品推荐
相关产品推荐

