我通常使用 document.getElementById('id').style.display = 'none'
通过Javascript来隐藏单个div。是否有类似简单的方法可以隐藏所有属于相同类别的元素?
我需要一个纯Javascript的解决方案,不使用jQuery。
显然SO希望我编辑这个问题以澄清它不是关于修改字符串的问题。但它并不是。
我通常使用 document.getElementById('id').style.display = 'none'
通过Javascript来隐藏单个div。是否有类似简单的方法可以隐藏所有属于相同类别的元素?
我需要一个纯Javascript的解决方案,不使用jQuery。
显然SO希望我编辑这个问题以澄清它不是关于修改字符串的问题。但它并不是。
<script>
var divsToHide = document.getElementsByClassName("classname"); //divsToHide is an array
for(var i = 0; i < divsToHide.length; i++){
divsToHide[i].style.visibility = "hidden"; // or
divsToHide[i].style.display = "none"; // depending on what you're doing
}
</script>
这段内容来自于这个SO问题:如何通过class id隐藏div元素,然而考虑到你要求“老派”的JS解决方案,我认为getElementsByClassName只被现代浏览器支持。
docReady(function() {
// 在此处插入上述代码
});
并从此处包含docReady函数:https://dev59.com/PWkw5IYBdhLWcg3wbqAS - brianlmerritt在javascript中,隐藏所有具有特定类的元素有许多方法,其中一种方式是使用for循环,但我想向您展示其他做法。
1. forEach和querySelectorAll('.classname')
document.querySelectorAll('.classname').forEach(function(el) {
el.style.display = 'none';
});
2.使用 getElementsByClassName
配合 for...of
for (let element of document.getElementsByClassName("classname")){
element.style.display="none";
}
3.Array.prototype.forEach getElementsByClassName
Array.prototype.forEach.call(document.getElementsByClassName("classname"), function(el) {
el.style.display = 'none';
});
4.[ ].forEach和getElementsByClassName
[].forEach.call(document.getElementsByClassName("classname"), function (el) {
el.style.display = 'none';
});
我已经展示了一些可能的方法,还有更多的方法可以做到这一点,但从上面的列表中,您可以选择适合您的任何一种方式。
注意:所有以上方法都受到现代浏览器的支持,但有些方法可能无法在旧的浏览器(如Internet Explorer)中工作。
虽然晚了点,但我发现这是最简单的解决方案(如果你不使用jQuery):
var myClasses = document.querySelectorAll('.my-class'),
i = 0,
l = myClasses.length;
for (i; i < l; i++) {
myClasses[i].style.display = 'none';
}
function getElementsByClassName(classname, node) {
if(!node) node = document.getElementsByTagName("body")[0];
var a = [];
var re = new RegExp('\\b' + classname + '\\b');
var els = node.getElementsByTagName("*");
for(var i=0,j=els.length; i<j; i++)
if(re.test(els[i].className))a.push(els[i]);
return a;
}
var elements = new Array();
elements = getElementsByClassName('yourClassName');
for(i in elements ){
elements[i].style.display = "none";
}
document.getElementsByClassName()
方法可以改进此内容。 - Tim Down我建议采用另一种方法。不要手动更改所有对象的属性,而是向文档添加新的CSS:
/* License: CC0 */
var newStylesheet = document.createElement('style');
newStylesheet.textContent = '.classname { display: none; }';
document.head.appendChild(newStylesheet);
let elements = document.querySelectorAll('.custom-class')
elements.forEach((item: any) => {
item.style.display = 'none'
})
通过这样做,您可以避免所有的循环、索引等操作。
在现代JavaScript中,这个一行代码就可以搞定:
document.querySelectorAll('.my-class').forEach(el => el.hidden = true);
使用纯HTML\5,使用HTML安全属性名称和值。使用纯JavaScript传统访问、目标和操作感兴趣的cssRule。
p.s.: 没有递归迭代,没有对DOM进行递归调用,也没有元素迭代和值分配。这使得它成为可能的最快解决方案,唯一的瓶颈是机器相关的渲染和刷新能力。
onclick = function( ) {
with( document.styleSheets.style1.cssRules[0] )
style.display = style.display ? "" : "none";
}
.showHide{
color: #777;
}
<!DOCTYPE html>
<html>
<head>
<style id=style1>
.showHide{
}
</style>
</head>
<body>
<div class=showHide>hide this element</div>
<div class=showHide>hide this element</div>
<div class=showHide>hide this element</div>
<div class=dontHide>this element will not hide</div>
<div class=showHide>hide this element</div>
</body>
</html>
jQuery的解决方案非常简单:
$(".className").hide();
我非常喜欢@Haritsinh Gohil上面的答案,这启发了我写下这个答案,可以使用hidden
属性切换项目的可见性。
function toggle() {
document.querySelectorAll('div.sad').forEach(function(elem) {
elem.hidden = !elem.hidden;
});
}
<button onclick="toggle()">I'm a button, click me to hide the saddies</button>
<div id="parent">
<div class="happy">
:)
</div>
<div class="sad">
:(
</div>
<div class="sad">
:'(
</div>
<div class="angry">
>:(
</div>
</div>