开发者问题收集

style.display似乎不起作用

2017-12-18
1226

我尝试隐藏/显示某些元素,但只有对父节点执行此操作时才有效,对子元素则无效。有人知道为什么会发生这种情况吗?

const ulList = document.querySelector('ul');
const studentList = ulList.querySelectorAll('li');

ulList.style.display = 'none'; // (when I do it like this, everything is fine).

studentList.style.display = 'none'; // (but if I do it like these, the error "Uncaught TypeError: Cannot set property 'display' of undefined" appears on the console)

谢谢帮助!

2个回答

querySelector() 仅返回第一个匹配的单个元素,但 querySelectorAll() 返回列表。您必须对所有列表项应用样式。 尝试以下方法:

const studentList = document.querySelectorAll('li');

studentList.forEach(function(li){
  li.style.display = 'none';
});
Mamun
2017-12-18

我明白你的意思……但是为什么当我这样做时(也在循环中),“block”的显示属性不起作用。解释器只是忽略它:

const ulList = document.querySelector('ul');
const studentList = document.querySelectorAll('li');

ulList.style.display = 'none';

for (let i = 0; i < studentList.length; i += 1) {
    if ((i + 1) >= numPage && i < y) {
        studentList[i].style.display = 'block';
    }
}

不要关注条件。它是我代码的一部分。循环和条件运行,当索引为 0 的第一个元素收到 block 属性时,什么也没有发生。

Carlos Daniel Machado Granadil
2017-12-18