如何使用.querySelectorAll选择器定位.style attribut?

时间:2016-02-24 12:06:33

标签: javascript css selectors-api

我通过.querySelectorAll选择了一个特定的课程:

var hit3 = document.querySelectorAll(".lattern.hit-3 .circle");

我现在正尝试通过执行以下操作来定位并调整此元素的.style.visibility attribut:

hit3.style.visibility = "visible";

然而,这会导致错误:

Uncaught TypeError: Cannot set property 'visibility' of undefined

如何使用上述.style选择器定位特定的.querySelectorAll

Fiddle

2 个答案:

答案 0 :(得分:1)

querySelectorAll返回一个节点列表,因此您应该指定要更改的元素的索引:

hit3[0].style.visibility = "visible";

如果您想要更改返回的所有元素的css,您应该遍历它们,请参阅Johny's answer

希望这有帮助。

答案 1 :(得分:1)

querySelectorAll返回一个类似于结构(NodeList)的数组,它没有style属性。

但我觉得你需要的是略有不同,我假设想要显示点击元素的圆圈

var latternElement = document.querySelectorAll('.lattern');

function toggleElement(el) {
  el.querySelector('.circle').classList.add('visible'); //also minor tweaks, use css rules
}

for (var i = 0; i < latternElement.length; i++) {
  latternElement[i].addEventListener('click', function(event) {
    if (this.classList.contains("hit-3")) { //minor tweaks - only supported in modern browsers
      toggleElement(this);
    }
  });
}
.lattern {
  position: relative;
  width: 100px;
  height: 50px;
  background-color: red;
  margin: 0 0 10px 0;
  cursor: pointer;
}
.circle {
  position: relative;
  top: 20px;
  left: 20px;
  border-radius: 50% 50%;
  width: 16px;
  height: 16px;
  background-color: green;
  visibility: hidden;
}
.circle.default,
.circle.visible {
  visibility: visible;
}
<div class="lattern hit-1">
  <div class="circle"></div>
</div>
<div class="lattern hit-2">
  <div class="circle default"></div>
</div>
<div class="lattern hit-3">
  <div class="circle"></div>
  click me
</div>