javascript - 我试图用 JS 改变颜色但它不起作用
问题描述
在 Firefox 控制台中运行此代码时出现错误。错误:TypeError:redSquare 为 null 但是在 codepen 中它工作正常。
我不知道为什么会这样。浏览器中什么也没有发生。
/* Document Object Model */
const redSquare = document.querySelector('.red-square');
redSquare.style.color = 'limegreen';
const elementsToChange = document.querySelectorAll('.js-target');
for (let i = 0 ; i < elementsToChange.length; i++){
const currentElement = elementsToChange[i];
currentElement.innerText = "Modified by Js!";
}
.red-square {
border: 2px solid red;
color: black;
background-color: dodgerblue;
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width>, initial-scale=1.0">
<title>Part-6</title>
<link href="../CSS3/1.css" rel="stylesheet"/>
<script src= "../JavaScript/6.js"></script>
</head>
<body>
<h1 class = "red-square">DOM</h1>
<ul>
<li class="js-target">Unchanged</li>
<li class="js-target">Unchanged</li>
<li>Won't Change</li>
<li class="js-target">Unchanged</li>
</ul>
</body>
</html>
解决方案
document.querySelector('missingSelector')
返回null
document.querySelectorAll('missingSelector')
返回NodeList
(.length = 0)
因此,请确保 DOM 内容已加载并可供查找。window.onload = function(){...your code here}
用或其他方式包装您的代码。
如果你把你的脚本放在<body>
直接之前的底部会更好</body>
。
原因是解析和解释器机器在第一个循环中获取变量的值。所以变量取值undefined
或null
首先。DOM结构也需要一些时间来构建,那时js已经在工作了。
将脚本放在底部的更好做法,但它不能提供 100% 的保证。将依赖的 DOM 代码包装到文档window.onload
或"DOMContentLoaded"
eventListener 的最佳实践。
这就是为什么最好在单独的文件或主函数之外(例如 window.onload)初始化和定义所有函数和常量。里面唯一依赖于 DOM 元素的函数和事件。
推荐阅读
- python - 使用图像处理检测皮肤图像中的血管
- python - Python argparse 可选破折号整数参数
- javascript - Vue/Vuex 在创建的钩子中等待异步调度
- python - 复杂字典的深拷贝
- tensorflow - 导出具有多个服务功能的 DNNLinearCombinedClassifier
- r - R中比例或比率响应变量(0,1)的贝叶斯回归
- c# - 我应该在返回 json 对象的获取请求中使用 IActionResult
- python-3.x - 使用先前保存的模型进行预测:(0) 无效参数:indices[0,9] = 14914 is not in [0, 14480)
- sql - SQL 中的 LIKE 是什么意思?
- python - STFT 的节能