开发者问题收集

使用纯 JavaScript 为 <body> 内的所有元素添加属性[重复]

2020-11-24
806

因此,我目前正在使用 JavaScript 制作加载屏幕。我正尝试在加载屏幕之前将 display: none; 添加到所有元素中。

我尝试过这种方法:

var elements = document.querySelectorAll( 'body > *' );
elements.style.display="none";

但它只是显示为

Uncaught TypeError: Cannot set property 'display' of undefined
    at <anonymous>:2:23

我该怎么做?

2个回答

这是使用 forEach 方法的解决方案。

注意!如果您将其称为 ('body *') ,则所有元素都将被设置样式,包括所有子元素。但是如果您将其称为 ('body >*') ,则样式将分配给所有表面元素,但不分配给内部元素。

var elements = document.querySelectorAll('body *');
elements.forEach(function(element) {
  element.style.display = "none";
});
<div><p>1</p></div>
<div><p>2</p></div>
<a>3</a>
s.kuznetsov
2020-11-24

在这里,您的元素变量不是特定元素,而是元素的 NodeList(一种数组),因此您必须循环将样式应用于每个元素:

var elements = document.querySelectorAll( 'body > *' );
for(var i = 0; i < elements.length; i++) elements[i].style.display="none";

但请确保您的脚本不会在元素加载到页面上之前执行。如果是这样,您可能需要等待 domready,或使用 domMutationObserver API 来执行这些操作 ;)

Janus
2020-11-24