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

JavaScript获取append追加HTML元素属性返回undefined问题

问题根因

find方法里调用firstChild拿到的不是你动态追加的img元素,是id="b"的div内部的空白文本节点。
你的HTML中<div id="b">和闭合标签之间存在换行、缩进空格,浏览器会把这类空白内容解析为文本节点,排在所有子节点的最前面。文本节点没有className、src这类HTML元素专属属性,所以输出undefined,全程也不会触发报错。
你在add函数里重复给src、class属性赋值的写法不会触发这个问题,后赋值的内容会正常覆盖前值。

修复方案
  • 优先用firstElementChild替换firstChild:这个API只会返回第一个子元素节点,自动跳过空白文本、注释等非元素节点,兼容性覆盖所有主流浏览器。
    修复后的find函数代码:
function find() {
  console.log("find");
  const elm = document.getElementById("b").firstElementChild;
  console.log(elm.className); // 正常输出 lpoop
  console.log(elm.src); 
  // 注意:直接读src属性会返回浏览器自动补全的绝对路径,如果需要拿到你设置的原始值/poop,改用elm.getAttribute('src')即可
}
  • 如果需要兼容不支持firstElementChild的老旧环境,可以手动遍历子节点过滤出元素节点(元素节点的nodeType值固定为1):
function find() {
  console.log("find");
  const nodeList = document.getElementById("b").childNodes;
  let elm = null;
  for (let i = 0; i < nodeList.length; i++) {
    if (nodeList[i].nodeType === 1) {
      elm = nodeList[i];
      break;
    }
  }
  console.log(elm.className);
  console.log(elm.src);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 07:39:21