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

点击th元素获取data-count值始终为undefined,原因何在?

解决jQuery 1.4.1中无法读取data-count属性的问题

哦,这个问题我太熟了!罪魁祸首就是你用的jQuery 1.4.1版本太老了——它的.data()方法还不支持直接读取HTML5标准的data-*自定义属性,这就是为什么data_id一直是undefined的原因。

问题根源

在jQuery 1.5版本之前,.data()方法的设计逻辑和后来的版本完全不同:它主要用于读取jQuery内部存储的数据,或者是传统的data属性(比如<div data="value">),而不会自动识别并解析data-count这种带连字符的HTML5属性。

两种解决方案

方案1:升级jQuery版本(推荐)

这是最彻底的解决办法,毕竟jQuery 1.4.1是2010年的老版本,存在大量已知的bug和兼容性问题。只需要把你的jQuery引用换成1.5及以上版本(比如1.12.4或者更稳定的版本),原来的代码就能正常工作,甚至还可以简化——不用通过id重新查找元素,直接用$(this)操作:

$(".s_header").click(function() { 
    var $th = $(this);
    var data_id = $th.data('count');
    console.log($th.attr('id'));
    console.log(data_id);
    
    if (data_id % 2 == 0) {
        console.log("Even");
    } else {
        console.log("odd");
    }
    
    $th.data('count', data_id + 1);
});

方案2:不升级版本,改用.attr()方法

如果因为某些限制不能升级jQuery,那就直接用.attr()来读取和修改data-count属性,注意要把读取到的字符串转成数字,否则取模运算会出错:

$(".s_header").click(function() { 
    var column_id = $(this).attr('id');
    // 转成整数,第二个参数10是十进制基数,避免进制问题
    var data_id = parseInt($('#' + column_id).attr('data-count'), 10);
    console.log(column_id);
    console.log(data_id);
    
    if (data_id % 2 == 0) {
        console.log("Even");
    } else {
        console.log("odd");
    }
    
    $('#' + column_id).attr('data-count', data_id + 1);
});

额外提示

不管用哪种方案,都建议直接用$(this)来操作当前点击的元素,不用通过id二次查找,这样代码更简洁,性能也更好。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:09:12