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

jQuery实现同class div内第二个span数值匹配修改背景色时全部显示绿色

jQuery根据div内第二个span数值动态设置背景色的问题解决

问题场景

需要为统一带有.value ok类的div元素,根据其内部第二个span存储的数值(示例值为75、40、54)匹配对应背景色做高亮,现有实现存在缺陷:所有div会被统一设置为绿色,无法根据单个div的数值做差异化渲染。

现有HTML结构

<div class="containerbox">
    <div id="centerbox1" style= "min-width:25%; max-height: 90px">
      <p><div class="value ok" data-color="25">
        <span style="color: #fff ;font-weight:bold; font-size:36px">kk</span>
      <span style="color: #fff ;font-weight:bold; font-size:36px">75</span>
      <br>
      </div></p>
  </div>
    <div id="centerbox1" style= "min-width:25%; max-height: 90px">
     <p> <div class="value ok" data-color="100">
        <span  style="color: #fff ;font-weight:bold; font-size:36px">rr</span>
      <span  style="color: #fff ;font-weight:bold; font-size:36px">40</span>
      <br>
      </div></p>
  </div>
    <div id="centerbox1" style= "min-width:25%; max-height: 90px">
      <p><div class="value ok" data-color="25">
        <span  style="color: #fff ;font-weight:bold; font-size:36px">ee</span>
      <span  style="color: #fff ;font-weight:bold; font-size:36px">54</span>
      <br>
      </div></p>
        </div>
</div>

已尝试的错误实现及问题

第一版nth选择器实现

$('.value.ok').each(function() {
  var val = parseInt( $('.value span:nth-child(even)').text()),
  dd = parseInt( $('.value span:nth-child(2)').text());
  var d = 50;
  var e = 65;
  if (val < d) {
    $(this).css('background-color', 'red');
  }
  if (val > d && val < e) {
    $(this).css('background-color', 'yellow');
  }
  if (val > e && val <= dd) {
    $(this).css('background-color', 'green');
  }
});

核心缺陷:循环内没有给元素选择器绑定当前循环的上下文,直接全局选取页面上所有匹配的span元素,text()方法会把所有匹配span的文本拼接为一个长字符串,最终parseInt解析得到的是拼接后的大数值,远大于阈值65,所有div都会命中绿色的判断逻辑。当移除单个div内的一个span时,匹配的span数量减半,碰巧能拿到单个数值,功能就会临时正常。

第二版非nth选择器实现

$('.value.ok').each(function() {
var val = parseInt( $(this).text()),
    dd = parseInt( $('.value.ok').text());
    var d = 50;
    var e = 65;
if (val < d) {
    $(this).css('background-color', 'red');
}
if (val > d && val < e) {
    $(this).css('background-color', 'yellow');
}
if (val > e && val <= dd) {
    $(this).css('background-color', 'green');
}
});

核心缺陷:直接读取当前div的全量文本做数值解析,会把第一个span内的字母内容混入文本流,parseInt解析结果会出现异常;同时全局选取的参考值没有和当前div绑定,最终所有div还是会统一命中同一个背景色的判断逻辑。

修正方案

核心调整方向:

  • 在each循环内,所有元素选择必须绑定当前$(this)的上下文,禁止全局直接选取类名匹配的元素
  • 精准定位每个.value.ok内部的第二个span,单独读取该元素的文本值做数值解析
  • 移除无意义的全局参考值判断,直接按数值阈值匹配对应背景色

修正后可正常运行的代码:

$('.value.ok').each(function() {
  // 绑定当前循环的div上下文,定位内部第二个span读取数值
  const $currentBox = $(this);
  const targetVal = parseInt($currentBox.find('span').eq(1).text().trim(), 10);
  const lowThreshold = 50;
  const midThreshold = 65;

  // 根据数值匹配对应背景色
  if (targetVal < lowThreshold) {
    $currentBox.css('background-color', 'red');
  } else if (targetVal > lowThreshold && targetVal < midThreshold) {
    $currentBox.css('background-color', 'yellow');
  } else {
    $currentBox.css('background-color', 'green');
  }
});

补充说明:原逻辑里的val <= dd判断没有实际意义,因为dd本身是通过全局选择器拿到的拼接文本值,和单个div的实际数值没有关联,可以直接移除该判断分支,按数值区间匹配背景色即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.24 13:36:03