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

JavaScript获取<a>标签class及自定义属性值无效问题求解

问题原因

你无法读取对应属性值核心是两个写法错误:

  • 只有HTML标准属性会直接映射为DOM元素对象的属性,支持元素.属性名的读取方式,你用到的codigo、nombre、padre都属于自定义属性,这种写法自然拿不到值
  • class是JavaScript保留字,不能通过x[i].class直接读取,要么用标准映射属性className,要么和自定义属性用统一方法读取
正确读取方式

不管是标准属性还是自定义属性,都可以通过原生DOM提供的getAttribute('属性名')方法读取,无兼容问题,是最通用的属性读取方案。

修正后可直接运行的代码
var linkList = document.querySelectorAll("a");
var resultArray = [];
for (var i = 0; i < linkList.length; i++) {
  var currentLink = linkList[i];
  // 读取并清理文本内容
  var cleanText = currentLink.textContent.replace(/\s+/g, ' ').trim();
  // 读取所有需要的属性
  var idVal = currentLink.id;
  var classVal = currentLink.getAttribute('class');
  var codigoVal = currentLink.getAttribute('codigo');
  var nombreVal = currentLink.getAttribute('nombre');
  var padreVal = currentLink.getAttribute('padre');
  // 按顺序存入结果数组
  resultArray.push([idVal, cleanText, classVal, codigoVal, nombreVal, padreVal]);
}

function make_table() {
  // 表头同步新增对应字段列
  var table = '<table border="1" cellpadding="4" cellspacing="0"><thead><tr><th>idno</th><th>nametext</th><th>class</th><th>codigo</th><th>nombre</th><th>padre</th></tr></thead><tbody>';
  for (var i = 0; i < resultArray.length; i++) {
    table += '<tr><td>'+ resultArray[i][0] + '</td><td>'+resultArray[i][1]+'</td><td>'+resultArray[i][2]+'</td><td>'+resultArray[i][3]+'</td><td>'+resultArray[i][4]+'</td><td>'+resultArray[i][5]+'</td></tr>';
  }
  table += '</tbody></table>';
  var w = window.open("");
  w.document.write(table); 
}
make_table()
补充说明
  • 你原代码里写的var allcontent = x[i].elements是无效代码,DOM元素不存在elements属性,直接删除即可
  • 如果后续需要读取data-开头的自定义属性,除了getAttribute方法外,还可以通过元素.dataset.驼峰格式属性名读取,比如data-placement对应currentLink.dataset.placement
  • 代码里给表格加的边框、内边距属性只是为了方便查看内容,不需要可以直接删掉

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 03:06:10