Js 中 Cannot read property 'appendChild' of Undefined 错误
“Cannot read property 'appendChild' of Undefined”错误的发生有两个原因:
-
在不存在的 DOM 元素上调用
appendChild
方法。 - 在声明 DOM 元素的 HTML 上方插入 JS 脚本标记。
下面是一个产生上述错误的示例代码
const el = undefined;
const p = document.createElement('p');
// ⛔️ Uncaught TypeError: Cannot read properties of undefined (reading 'appendChild')
el.appendChild(p);
该错误最常发生在访问不存在的索引处的数组之后,例如 在调用 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 元素调用该方法。
相关文章
将 Python 类对象序列化为 JSON
发布时间:2023/04/25 浏览次数:152 分类:Python
-
本教程介绍序列化过程。 它还说明了我们如何使用 toJSON() 方法使 JSON 类可序列化,并包装 JSON 以转储到其类中。
Python 使用 JSON Diff 比较多级 JSON 对象
发布时间:2023/04/25 浏览次数:70 分类:Python
-
本文旨在介绍我们如何在Python中比较两个多级 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。
在 AngularJS 中重新加载页面
发布时间:2023/04/14 浏览次数:141 分类:Angular
-
我们可以借助 windows.location.reload 和 reload 方法在 AngularJS 中重新加载页面。
在 AngularJs 中设置 Select From Typescript 的默认选项值
发布时间:2023/04/14 浏览次数:77 分类:Angular
-
本教程提供了在 AngularJs 中从 TypeScript 中设置 HTML 标记选择的默认选项的解释性解决方案。
在 AngularJS 中启用 HTML5 模式
发布时间:2023/04/14 浏览次数:149 分类:Angular
-
本文讨论如何在 AngularJS 应用程序上启用带有深度链接的 HTML5 模式。