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

JQuery中使用.data()获取值为何有时返回undefined?如何修复?

解决方法

你的推测完全正确——$(data)会把返回的HTML里所有节点(包括空白文本节点、注释等非元素节点)都包装成jQuery对象,遍历这些节点自然会拿到大量undefined的jobid。只需要在解析时精准过滤出目标<tr>元素即可解决问题:

修改后的代码

function (data) {
   // 直接过滤出带有myjobclass类的tr元素,排除无关节点
   var entries = $(data).filter('tr.myjobclass');
    
   entries.each(function( index ) {
        var jobid = $(this).data('jobid');
        // 现在jobid只会来自目标tr,不会出现undefined
        var exist = $('#jobtable tr[data-jobid="' + jobid + '"]');

        if(exist.length > 0) {
             //do stuff
        } 
        else {
             //do stuff
        }
   });

   var sel = entries.map(function() {
        var jobid = $(this).data('jobid');
        return 'tr[data-jobid="' + jobid + '"]';
   }).get().join(',');

   $('#mytableid tr.myjobclass').not(sel).remove();
}

关键说明

  • 过滤节点:用filter('tr.myjobclass')直接从解析后的data中筛选出带有myjobclass类的<tr>元素,跳过所有无关的文本、注释等节点。如果你的返回HTML是包含在<table>标签内的,把filter换成find即可:$(data).find('tr.myjobclass')
  • 复用过滤后的集合:后续的each和map都直接使用过滤好的entries变量,避免重复解析data带来的性能浪费和错误。

这样修改后,遍历的就只有目标<tr>元素,jobid就不会再出现undefined的情况了。

内容的提问来源于stack exchange,提问作者stats con chris

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 15:06:16