简体   繁体   English

document.querySelector只能读取1个类

[英]document.querySelector reading only 1 class

The document.getElementById is executing only the first <ul> when I click, I want all the ul 's working as I click inside them. 当我单击document.getElementById它仅执行第一个<ul> ,我希望所有ul都能在单击它们时起作用。

PHP 的PHP

for ($i=0; $i < $Count_Assoc['dev'] ; $i++) { 

  $History_Assoc = mysqli_fetch_array($HistoryQuery);

  echo '<ul class="repoFolder" data-value="'. $History_Assoc['devaddr'] .'">';
  echo '<br>';

  echo '<h5 style=" color: black;
  padding: 0px 9em 0em 0em;">DevAddr:&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspData:</h5>';
  echo '<p>'.$History_Assoc['devaddr'].'&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp'.$History_Assoc['data'].'</p>';

  echo "</ul>";
  echo '<br>';

}

Javascript Java脚本

document.querySelector('.repoFolder').onclick = function() {rootFolder()};

function rootFolder() {
  alert(document.querySelector('.repoFolder').getAttribute('data-value'));
}

You should set the class on your lists, rather than the Id. 您应该在列表中设置类别,而不是ID。 Id is supposed to be a unique identifier, but class is a way to can create multiple common elements. id应该是唯一的标识符,但是class是可以创建多个公共元素的方法。 Here I have changed your ids into classes 在这里,我将您的ID更改为类

for ($i=0; $i < $Count_Assoc['dev'] ; $i++) { 

  $History_Assoc = mysqli_fetch_array($HistoryQuery);

  echo '<ul class="repoFolder" data-value="'. $History_Assoc['devaddr'] .'">';
  echo '<br>';

  echo '<h5 style=" color: black;
  padding: 0px 9em 0em 0em;">DevAddr:&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspData:</h5>';
  echo '<p>'.$History_Assoc['devaddr'].'&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp'.$History_Assoc['data'].'</p>';

  echo "</ul>";
  echo '<br>';

}

And JavaScript: 和JavaScript:

var folders = document.getElementsByClassName("repoFolder");
for (let i = 0; i < folders.length; i++) {
  folders[i].onclick = function() {rootFolder.call(this)}; // note that I am passing in the context to rootFolder. 
}

function rootFolder() {

  alert(this.getAttribute('data-value'));

}

You can use querySelectorAll to select all element with a class repoFolter and loop through each element and append the eventListener 您可以使用querySelectorAll选择具有repoFolter类的所有元素,并循环遍历每个元素并追加eventListener

var elements = document.querySelectorAll('.repoFolder');
elements.forEach(function(el){
    el.addEventListener('click', rootFolder);
})

function rootFolder( ){ ... }

From w3schools.com w3schools.com

The querySelector() method returns the first element that matches a specified CSS selector(s) in the document. querySelector()方法返回与文档中指定的CSS选择器匹配的第一个元素。

If you want to get all the elements with specific class or name: 如果要获取具有特定类或名称的所有元素,请执行以下操作:

document.getElementsByClassName("text").onclick = function () {
    alert("Called");
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM