javascript - 如何通过单击单选按钮来切换标签的类。需要香草 JS 而不是 JQuery
问题描述
我尝试在 vanilla js 中编写一个将类添加.active
到label
of的函数checked input
。
不幸的是,我卡住了,我能够只使用 jquery 编写这个函数。
下面是代码片段。
重要 - html 结构无法更改。不能添加额外的类。输入必须在标签中。
在 vanilla js 中写同样的东西有什么建议吗?我知道我可以inputs
一次获得所有内容.querySelector
并使用例如forEach
,但是当单击任何输入时,它会同时使用两个类form
中进行切换。
感谢帮助。
let $fruits = $('.fruits');
let $vege = $('.vege');
const filterToggleActive = function ($filterName) {
$inputs = $filterName.find('input');
$inputs.each(function () {
$(this).on('click', function () {
$label = $filterName.find('label');
$label.removeClass('active');
$currentLabel = $(this).parent('label');
$currentLabel.addClass('active');
});
});
}
filterToggleActive($fruits);
filterToggleActive($vege);
.fruits {
border: 1px solid red;
margin: 15px;
}
.vege {
border: 1px solid green;
margin: 15px;
}
label {
font-size: 18px;
cursor: pointer;
}
.active {
text-decoration: underline;
font-weight: bold;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="fruits">
<form action="">
<label><input type="radio" name="food"> Apples</label>
<label><input type="radio" name="food"> Bananas</label>
<label><input type="radio" name="food"> Oranges</label>
</form>
</div>
<div class="vege">
<form action="">
<label class="active"><input type="radio" name="food">Carrots</label>
<label><input type="radio" name="food">Tomatos</label>
<label><input type="radio" name="food"> Potatos</label>
</form>
</div>
解决方案
你可以只用javascript来做到这一点。你会想要的querySelectorAll
,就像querySelector
第一场比赛一样。
var inputs = document.querySelectorAll("input");
inputs.forEach(function(i){
i.addEventListener('click', function(el){
var clicked = el.currentTarget;
var active = clicked.parentElement.parentElement.querySelector('.active');
active && active.classList.remove('active');
clicked.parentElement.classList.add('active');
});
});
.fruits {
border: 1px solid red;
margin: 15px;
}
.vege {
border: 1px solid green;
margin: 15px;
}
label {
font-size: 18px;
cursor: pointer;
}
.active {
text-decoration: underline;
font-weight: bold;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="fruits">
<form action="">
<label><input type="radio" name="food"> Apples</label>
<label><input type="radio" name="food"> Bananas</label>
<label><input type="radio" name="food"> Oranges</label>
</form>
</div>
<div class="vege">
<form action="">
<label class="active"><input type="radio" name="food">Carrots</label>
<label><input type="radio" name="food">Tomatos</label>
<label><input type="radio" name="food"> Potatos</label>
</form>
</div>
推荐阅读
- nginx - 无法使用与 Tor 连接的 PHPMailer 发送电子邮件。收到 SMTP 错误:无法连接到服务器:php_network_getaddresses。如何解决这个问题?
- php - 这个 js.php 文件是什么意思
- firebase - 无法将资产从 Firebase 存储加载到统一
- php - 为什么默认禁用 PHP ZTS?
- c - 访问 struct C 中的 char* 或 char 数组
- python - 如何获取当前登录 Flask-Login 的用户列表?
- python - Python用指针遍历列表
- python-3.x - Python 和 openpyxl 运行缓慢
- python - 为什么 Pandas .loc 只改变一行?
- azure - 从 azure blob 存储中编码 2 次的元数据存储路径