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
相关产品推荐
相关产品推荐

