javascript - 跨度类的Js变量在if语句中未定义
问题描述
这是我的整个js代码:
var htmlLang = document.documentElement.getAttribute("lang");
var en = document.getElementsByClassName("en");
var es = document.getElementsByClassName("es");
if(htmlLang == "en"){
es.style.display = "none";
} else if(htmlLang == "es"){
en.style.display = "none";
}
以下是我要修改的 HTML 元素:
<td><a href='register.php'><span class='en'>Register</span><span class='es'>Registrar</span></a></td>
<td><a href='about.php'><span class='en'>About Me</span><span class='es'>Sobre mi</span></a></td>
<td><a href='login.php'><span class='en'>Log In</span><span class='es'>Iniciar sesiõn</span></a></td>
当我启动页面时,我收到错误:
Uncaught TypeError: Cannot set property 'display' of undefined at main.js:6 < which is at the "es.style ..." in the js.
对我来说,一切看起来都是正确的,我认为它与范围有关,但是将整个变量(document.getElements ...)放在 if 语句中我得到了同样的错误。
感谢任何能提供帮助的人!
解决方案
当您选择项目时,document.getElementByClassName
您将获得所有找到的元素的集合列表,因此您将无法更改其样式。所以将其转换为数组Array.from(document.getElementByClassName("es"))
这是我所做的工作编辑:
var htmlLang = document.documentElement.getAttribute("lang");
var en = Array.from(document.getElementsByClassName("en"));
var es = Array.from(document.getElementsByClassName("es"));
if(htmlLang == "en"){
es.forEach(e => {
e.style.display = "none"
})
} else if(htmlLang == "es"){
es.forEach(e => {
e.style.display = "none"
})
}
推荐阅读
- python - “张量”对象没有“下”属性
- php - 从数据库中匹配并查找数组中的所有值
- javascript - 如何解决 node.js 中的无法 GET / 错误?
- ios - 当应用程序在后台时,如何录制屏幕?
- c++ - 使用地图容器的字母频率
- python - Pymodbus – 监听 PLC 设备上的输入变化
- unity3d - 当我构建 Unity3D 时。Somefile 是 Plugins 文件夹中的“命名空间错误”
- php - Ajax 未定义格式良好的 JSON
- autocomplete - 自动完成时如何记录最后一个搜索请求?
- sql-server - 在同一查询中连接 2 列的数据