gpt4 book ai didi

通过 getElementsByClassName 的 Javascript 内联循环

转载 作者:行者123 更新时间:2023-12-03 02:50:59 26 4
gpt4 key购买 nike

考虑以下简化的 html 代码:

<html>
<head>
<style>
.opts {display: none}
</style>
</head>

<body onload = "list = document.getElementsByClassName('opts')">

<form>
<ul>
<li>
<label>Show Options?</label>
<input type="radio" onclick="list[0].style.display = 'block'; list[1].style.display = 'block'; list[2].style.display = 'block';">yes<br>
<input type="radio" onclick="list[0].style.display = 'none'; list[1].style.display = 'none'; list[2].style.display = 'none';">no<br>
</li>

<li class="opts">
<label>Option 1</label>
<input type="text">
</li>

<li class="opts">
<label>Option 2</label>
<input type="text">
</li>

<li class="opts">
<label>Option 3</label>
<input type="text">
</li>

... etc ...

</ul>
</form>

</body>

</html>

基本上,它使用 JavaScript 根据用户 onclick 事件显示或隐藏可选元素。

问题
目前,对于 getElementsByClassName 中的每个元素,都有一行“手动”设置显示属性:

list[0].style.display = 'block';
list[1].style.display = 'block';
list[2].style.display = 'block';

有更简单的方法吗?例如,类似:

list[All].style.display = 'block';

ps:当然这可以通过一些for循环和附加函数声明来完成,但我正在寻找一个简单的内联js代码(即:没有外部js文件)

跟进

根据评论,有两种建议的方法可以在没有外部文件的情况下轻松地进行内联编码:

1) 扩展语法

[...list].forEach(el => el.style.display = 'block')

2) for 循环 新语法

for (const x of list) x.style.display = "block";

特别是,我决定使用 for 循环 新语法,因为它比扩展语法更容易阅读。然而,由于这两种方式都是 JavaScript 的最新功能,因此建议谨慎考虑旧版浏览器的兼容性。

最佳答案

// setup for the environment
const All = Symbol("All");
const setter = {set: function(fn) {
for (var i = 0; i < this.length; i++) {
fn(this[i], i, this);
}
}};
Object.defineProperty(HTMLCollection.prototype, All, setter);
Object.defineProperty(NodeList.prototype, All, setter);




// Your code
const list = document.getElementsByClassName('opts')

list[All] = x => x.style.fontWeight = "bold";
<form>
<ul>
<li>
<label>Show Options?</label>
<input type="radio" onclick="list[0].style.display = 'block'; list[1].style.display = 'block'; list[2].style.display = 'block';">yes<br>
<input type="radio" onclick="list[0].style.display = 'none'; list[1].style.display = 'none'; list[2].style.display = 'none';">no<br>
</li>

<li class="opts">
<label>Option 1</label>
<input type="text">
</li>

<li class="opts">
<label>Option 2</label>
<input type="text">
</li>

<li class="opts">
<label>Option 3</label>
<input type="text">
</li>

... etc ...

</ul>
</form>

关于通过 getElementsByClassName 的 Javascript 内联循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47860747/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com