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

jQuery为父级card div设置data-order属性不生效问题求助

修改说明

你代码的核心问题是遍历.card时的选择器范围错误,以及排序逻辑未在数据更新后重新触发,具体修改点如下:

  • 遍历每张card时,当前上下文的this就是.card元素本身,直接给它设置data-order即可,使用$(".card")会选中所有card,导致所有元素的属性被最后一次计算的sum覆盖
  • 排序逻辑目前仅在页面加载时执行一次,每次checkbox状态更新、sum重算完成后需要重新执行排序才能生效
  • 循环内的$(this).find(".card")属于无效查找,当前card的子元素不存在card类元素

修改后完整JS代码

// 全选触发器
$(".filter #sport").change(function(){
    var status = $(this).is(":checked");
    $(".sport").prop("checked",status);
});

$(".filter #relax").change(function(){
    var status = $(this).is(":checked");
    $(".relax").prop("checked",status);
});

$(".filter #family").change(function(){
    var status = $(this).is(":checked");
    $(".family").prop("checked",status);
});

// 分数计算&排序逻辑
function reCalcAndSort(){
  $("#risultatiquiz .card").each(function() {
    var sum = 0.00;
    $(this).find('.check-plus:checked').each(function() {
         sum += parseFloat($(this).val().trim()) || 0;
    });
    // 给当前card设置data-order,就是你要的核心逻辑
    $(this).attr('data-order', sum);
    $(this).find(".risultato").html('<span>Punteggio: </span>' + sum );
    $(this).find(".risultato").append('<br> data-order=' + sum );
  });
  // 重新排序并更新DOM
  var $sorted_items = getSorted('#risultatiquiz .card', 'data-order');
  $('#risultatiquiz').html($sorted_items);
}

// 排序工具函数
function getSorted(selector, attrName) {
    return $(
      $(selector).toArray().sort(function(a, b){
          // 如果需要支持小数可以把parseInt换成parseFloat
          var aVal = parseInt(a.getAttribute(attrName)),
              bVal = parseInt(b.getAttribute(attrName));
          return aVal - bVal;
      })
    );
}

// 绑定checkbox变更事件
$(".filter input").change(function(){
  reCalcAndSort();
});

// 页面初始化执行一次排序
reCalcAndSort();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 08:45:05