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

使用Stackable.js实现表格过滤时如何正确复制<tr>的data属性

问题原因&解决方案

你遇到的属性格式错误由三个问题共同导致:

  • jQuery .data() 会自动将HTML中kebab-case格式的data属性名转为驼峰格式(如原data-task-id会被转为taskId),直接拼接会生成不符合原格式的属性名
  • 拼接属性时没有给值包裹双引号,值包含空格时会被浏览器截断识别为新属性,出现引号错位问题
  • 直接将数组转为字符串插入标签,JS默认用逗号连接数组成员,导致属性之间多出多余逗号

修正代码

首先替换你收集data属性的逻辑:

var data = $(this).data(),
    tr_data = [];

// 驼峰命名转kebab-case工具函数,还原原属性名格式
function camelToKebab(str) {
  return str.replace(/([a-z0-9]|(?=[A-Z]))([A-Z])/g, '$1-$2').toLowerCase();
}

for(key in data) {
  // 转义值内的双引号,避免属性语法冲突
  const safeValue = String(data[key]).replace(/"/g, '&quot;');
  // 正确拼接属性结构:data-[kebab属性名]="[转义后的值]"
  tr_data.push(`data-${camelToKebab(key)}="${safeValue}"`);
}

// 用空格连接所有属性,替代默认的逗号分隔
const trAttrStr = tr_data.join(' ');

然后修改你插入属性的代码位置:把原来直接拼接tr_data数组的写法,替换为拼接上面生成的trAttrStr变量即可,比如原来的<tr ' + tr_data + '>改为<tr ' + trAttrStr + '>。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 20:12:03