迹忆客 专注技术分享

当前位置:主页 > 学无止境 >

Js 中 Cannot read property 'appendChild' of Undefined 错误

作者:迹忆客 最近更新:2023/01/01 浏览次数:

“Cannot read property 'appendChild' of Undefined”错误的发生有两个原因:

  1. 在不存在的 DOM 元素上调用 appendChild 方法。
  2. 在声明 DOM 元素的 HTML 上方插入 JS 脚本标记。

下面是一个产生上述错误的示例代码

const el = undefined;

const p = document.createElement('p');

// ⛔️ Uncaught TypeError: Cannot read properties of undefined (reading 'appendChild')
el.appendChild(p);

Js 中 Cannot read property 'appendChild' of Undefined

该错误最常发生在访问不存在的索引处的数组之后,例如 在调用 getElementsByClassName 之后。

const arr = [];

const p = document.createElement('p');

// ⛔️ Cannot read properties of undefined (reading 'appendChild')
arr[0].appendChild(p);

要解决“Cannot read property 'appendChild' of null”错误,请确保调用 appendChild() 方法的 DOM 元素包含在 DOM 中。

const elements = document.getElementsByClassName('does-not-exist');
console.log(elements); // 👉️ []

const p = document.createElement('p');

// ⛔️ Cannot read properties of undefined (reading 'appendChild')
elements[0].appendChild(p);

因为我们为 getElementsByClassName 方法提供了一个无效的类名,它返回一个空的类数组对象,所以访问它的第 0 个索引返回未定义,导致错误。

要解决“Cannot read property 'appendChild' of null”错误,在声明所有 DOM 元素后,在 body 标签底部插入 JS script 标签。

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
  </head>
  <body>
    <!-- ⛔️ BAD - script is run before div exists ⛔️ -->
    <script src="index.js"></script>

    <div class="box"></div>
  </body>
</html>

因为我们将 JS 脚本标记放在 div 元素之上,所以在将 div 元素添加到 DOM 之前运行 index.js 文件。

如果我们现在运行 index.js 文件, div 元素将不可用。

const boxes = document.getElementsByClassName('box');
console.log(boxes); // 👉️ []

const p = document.createElement('p');

// ⛔️ Cannot read properties of undefined (reading 'appendChild')
boxes[0].appendChild(p);

在声明 HTML 之后,我们必须将 JS 脚本标记放在正文的底部。

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
  </head>
  <body>
    <div class="box"></div>

    <!-- ✅ GOOD - div already exists ✅ -->
    <script src="index.js"></script>
  </body>
</html>

现在我们可以访问 index.js 文件中的 div 元素。

const boxes = document.getElementsByClassName('box');
console.log(boxes); // 👉️ [div.box]

const p = document.createElement('p');

// ✅ works
boxes[0].appendChild(p);

总结

当我们尝试对未定义的值调用 appendChild() 方法时,会抛出“Cannot read property 'appendChild' of Undefined”错误。

要解决该错误,需要确保仅对有效的 HTML 元素调用该方法。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

将 Python 类对象序列化为 JSON

发布时间:2023/04/25 浏览次数:152 分类:Python

本教程介绍序列化过程。 它还说明了我们如何使用 toJSON() 方法使 JSON 类可序列化,并包装 JSON 以转储到其类中。

在 Python 中展平 JSON

发布时间:2023/04/25 浏览次数:95 分类:Python

本教程将讨论使用 Python 中的条件语句、循环和 type() 函数来展平 JSON。

使用 Python 将数据附加到 JSON 文件

发布时间:2023/04/25 浏览次数:73 分类:Python

大多数 Web 应用程序和 Rest API 向用户提供 JSON 格式的数据,因为它在 Web 应用程序中被广泛使用且易于理解。 本教程介绍了使用 Python 将数据附加到 JSON 文件的可能方法。

如何在 Python 中将 JSON 转换为字典

发布时间:2023/04/22 浏览次数:184 分类:Python

在 Python 中,JSON(JavaScript Object Notation)是一种轻量级数据交换格式,常用于将数据从服务器发送到客户端。当我们需要将 JSON 数据解析为 Python 字典时,可以使用内置的 json 模块。本文

使用 NodeJS 检查 MongoDB 中是否存在集合

发布时间:2023/04/21 浏览次数:194 分类:MongoDB

在本文中,我们将检查 MongoDB 数据库中是否存在一个集合,并且我们还将查看与主题相关的示例,以使主题更容易理解。 为此,我们将使用 Node.js。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便