javascript - 处理 document.getElementById 抛出 nullreference 错误的更好方法是什么
问题描述
我尝试从 html 中获取一些可能存在或不存在的元素。现在,如果我尝试
//previous code
document.getElementById("MyElement1").checked = false;
document.getElementById("MyElement2").checked = false;
...
//rest of the code
那么如果其中一个元素不存在,则其余代码将不会被执行。
我会做
try {
document.getElementById("MyElement1").checked = false;
document.getElementById("MyElement2").checked = false;
...
} catch (e) {
console.log(e);
}
但据说你永远不应该使用 try...catch 来处理非严重错误。
如果其中一个元素不存在,是否有更优雅的方式使 javascript 忽略这行代码?
PS:如果这些元素之一不存在,则以下元素也不存在。因此,如果MyElement1
存在,但MyElement2
不存在, thenMyElement3
等MyElement4
也不存在。
此外,我尽量避免使用大块代码,例如对这些元素中的每一个使用 if
解决方案
如果我是你,我会做以下事情:
- 为所有元素添加一个通用类名(比如 myElement)。
- 使用 document.getElementsByClassName 一次性检索所有元素。
- 迭代它们以设置返回元素的检查值
解决方案类似于以下:
//previous code
const els = document.getElementByClassName("myElement");
Array.from(els).forEach((el) => { el.checked = false; });
...
//rest of the code
推荐阅读
- c - I don't know what is wrong with this loop parallelization
- python - 使用嵌套的元组列表创建 Python defaultdict
- python - Pandas 数据框将字符串拆分为具有条件和缺失数据的多列
- python - Tkinter Optionmenu StringVar.get() 返回空白
- azure - Creating a pipeline with a scheduled trigger with ADFV2
- bash - Curl(bash)命令在Jenkinsfile groovy脚本中不起作用
- firebase - FCM topic limits and expiration/invalidation of old unused topics?
- c# - C# Pause one console application when other console application starts
- laravel - Should processing logic of STRIPE be in the Laravel controller or in the validator?
- javascript - Yii2 - yii\grid\CheckboxColumn - 批量更新并将选定的行插入另一个表