javascript - 自从我开始学习 DOM 已经 2 周了。尝试制作语言切换器。不工作
问题描述
我目前在 html 中有两个按钮:
<div>
<button class="choose-lang" id="eng-btn">English</button>
</div>
<div>
<button class="choose-lang" id="rus-btn">Русский</button>
</div>
当我单击 eng-btn 的按钮时,它应该将“eng”的类切换为 display =“inline”,并将“rus”的类切换为 display =“none”;
// My html
<h2 class="form-heading"><span class="eng">Enter your v-number:</span><span class="rus">Введите ваш номер:</span></h2>
我将我的 CSS 文件保留为空,我的意思是我没有为 css 文件中的 eng 和 rus 类提供任何属性。
我在js文件中写了以下内容:
var engBtn = document.getElementById("eng-btn");
engBtn.addEventListener("click", function() {
document.getElementsByClassName("eng").style.display = "inline";
document.getElementsByClassName("rus").style.display = "none";
})
var rusBtn = document.getElementById("rus-btn");
rusBtn.addEventListener("click", function() {
document.getElementsByClassName("rus").style.display = "inline";
document.getElementsByClassName("eng").style.display = "none";
})
不知道为什么它不起作用
解决方案
getElementsByClassName
返回一个集合而不是单个元素,因此 id 没有 DOM 元素的属性和方法。
你可以尝试像这样迭代:
var engBtn = document.getElementById("eng-btn");
engBtn.addEventListener("click", function() {
// document.getElementsByClassName("eng").style.display = "inline";
// document.getElementsByClassName("rus").style.display = "none";
changeVisibility('rus', 'none');
changeVisibility('eng', 'inline');
})
var rusBtn = document.getElementById("rus-btn");
rusBtn.addEventListener("click", function() {
changeVisibility('rus', 'inline');
changeVisibility('eng', 'none');
// document.getElementsByClassName("rus").style.display = "inline";
// document.getElementsByClassName("eng").style.display = "none";
});
function changeVisibility(className, visibility) {
const collection = document.getElementsByClassName(className);
for(let i = 0 ; i < collection.length; i++) {
collection[i].style.display = visibility;
}
}
推荐阅读
- python - 在 Python 库安装中出现错误
- javascript - 根据 WooCommerce 中选择的状态显示或隐藏结帐邮政编码字段
- java - 在系统控制台上找不到 jhipster?
- mysql - 我如何通过查询来适应 MYSQL 中每个月的最后一个业务/工作日?
- arrays - 以下代码的时间复杂度是多少?我很困惑
- arrays - 使用上下文 api 时没有渲染
- node.js - 尝试使用 pm2 启动项目时出现 EADDRINUSE 错误
- javascript - 如何混淆我的 Android 项目资产中的一些 Javascript 文件?
- php - 为每个产品字段添加一个子字段 - Symfony Forms
- java - 我在 java.sql.BatchUpdateException 中遇到错误:ORA-00917:缺少逗号