Мне нужна помощь в понимании того, как классы работают с JavaScript.
В частности, я хочу добиться: Иметь одно и то же имя класса, которое одинаково работает для всех идентификаторов div.
В приведенном ниже примере у меня есть два абзаца, в которых есть «кнопка дополнительной информации». Я хочу, чтобы эта кнопка показывала скрытый контент на всех других div с этим именем класса. Однако он показывает только содержимое первого div, а не второго. Почему это происходит?
function infobtn() {
var s = document.querySelector(".info");
if (s.style.display === "block") {
s.style.display = "none";
} else {
s.style.display = "block";
}
}#paragraph {
float: left;
width: 50%;
height: auto;
margin: 5% 20% 5% 0%;
padding: 0% 0% 0% 0%;
}
#paragraph p {
background: rgba(200, 200, 200, 0.5);
width: 98%;
height: auto;
color: black;
padding: 1% 1% 1% 1%;
float: left;
overflow: hidden;
margin: 0% 1% 5% 0%;
text-align: center;
}
#paragraph .info {
width: 100%;
height: auto;
display: none;
float: left;
overflow: hidden;
transition: 0.5s ease-in-out;
background: rgba(255, 255, 255, 1);
border-radius: 0px 0px 10px 10px;
}
#paragraph h4 {
color: white;
background: rgba(50, 50, 50, 1);
width: 100%;
height: auto;
text-align: center;
padding: 1% 0% 1% 0%;
margin: -4% 0% 0% 0%;
float: left;
border-radius: 5px;
}
#paragraph2 {
float: left;
width: 50%;
height: auto;
margin: 0% 0% 0% 0%;
padding: 0% 0% 0% 0%;
}
#paragraph2 p {
background: rgba(200, 200, 255, 0.5);
width: 99%;
height: auto;
color: black;
padding: 1% 1% 1% 1%;
float: left;
overflow: hidden;
margin: 0% 1% 5% 0%;
text-align: center;
}
#paragraph2 .info {
width: 100%;
height: auto;
display: none;
float: left;
overflow: hidden;
transition: 0.5s ease-in-out;
background: rgba(255, 255, 255, 1);
border-radius: 0px 0px 10px 10px;
}
#paragraph2 h4 {
color: white;
background: rgba(50, 50, 50, 1);
width: 100%;
height: auto;
text-align: center;
padding: 1% 0% 1% 0%;
margin: -4% 0% 0% 0%;
float: left;
border-radius: 5px;
}<div id = "paragraph">
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse neque nisl, gravida vitae tellus a, commodo mattis risus. Pellentesque nec libero maximus, imperdiet justo tincidunt, placerat risus. Cras vitae neque tincidunt, sagittis turpis et,
tincidunt tortor. Sed sem lectus, suscipit at sollicitudin eget, euismod faucibus ex. Nam dignissim, est sit amet porttitor consectetur, tortor orci placerat augue, varius volutpat sem ante eget velit. Sed eget quam at nulla convallis pulvinar id
non eros. Pellentesque venenatis lacus at dolor varius, molestie imperdiet ex pretium. Vestibulum scelerisque quis mauris quis posuere. Duis vitae enim non mauris malesuada dictum. Morbi suscipit aliquet leo a maximus. Nunc faucibus ut urna nec rhoncus.
Proin semper ultricies rhoncus. Nulla efficitur rhoncus sollicitudin. Phasellus ac leo mi. Phasellus odio nulla, posuere ut ullamcorper quis, suscipit a erat. Phasellus sollicitudin iaculis ipsum, pretium mollis massa laoreet ut. </p>
<h4 onclick = "infobtn()"> More info</h4>
<div class = "info">
<h1> More info...</h1>
</div>
</div>
<div id = "paragraph2">
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse neque nisl, gravida vitae tellus a, commodo mattis risus. Pellentesque nec libero maximus, imperdiet justo tincidunt, placerat risus. Cras vitae neque tincidunt, sagittis turpis et,
tincidunt tortor. Sed sem lectus, suscipit at sollicitudin eget, euismod faucibus ex. Nam dignissim, est sit amet porttitor consectetur, tortor orci placerat augue, varius volutpat sem ante eget velit. Sed eget quam at nulla convallis pulvinar id
non eros. Pellentesque venenatis lacus at dolor varius, molestie imperdiet ex pretium. Vestibulum scelerisque quis mauris quis posuere. Duis vitae enim non mauris malesuada dictum. Morbi suscipit aliquet leo a maximus. Nunc faucibus ut urna nec rhoncus.
Proin semper ultricies rhoncus. Nulla efficitur rhoncus sollicitudin. Phasellus ac leo mi. Phasellus odio nulla, posuere ut ullamcorper quis, suscipit a erat. Phasellus sollicitudin iaculis ipsum, pretium mollis massa laoreet ut. </p>
<h4 onclick = "infobtn()"> More info</h4>
<div id = "class">
<h1> More info...</h1>
</div>
</div>


![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Согласно документации, document.getQuerySelector получает только первый элемент, соответствующий этому селектору. Ваш код будет ТОЛЬКО когда-либо работать с первым элементом.
Более того, при чтении кода у вас есть только один абзац с классом info. Так что это повлияет только на этот единственный абзац.
Тем не менее, если вы хотите получить все элементы с одинаковым именем класса, используйте функцию document.getElementByClassName.
function infobtn() {
var s = document.getElementsByClassName(".info");
var i;
for (i = 0; i < s.length; i++) {
if (s[i].style.display === "block") {
s[i].style.display = "none";
} else {
s[i].style.display = "block";
}
}
}
В общем, то, что вы пытаетесь сделать, лучше решить с помощью JQuery. Я рекомендую использовать эту библиотеку, когда вы станете более опытным в JavaScript.
также document.querySelectorAll() - это возможность выбрать все элементы, соответствующие селектору.
Только ваш первый информационный раздел имеет класс info. Я не уверен, что вы пытаетесь сделать с id = "class".
Кроме того, document.querySelector выбирает первый элемент с данным селектором, чтобы выбрать все из них, вам нужно использовать getElementsByClassName. Затем вам просто нужно добавить цикл for для просмотра выбранных элементов, см. Отредактированный фрагмент:
function infobtn() {
var s = document.getElementsByClassName("info");
for (var i = 0; i < s.length; i++) {
if (s[i].style.display === "block") {
s[i].style.display = "none";
} else {
s[i].style.display = "block";
}
}
}#paragraph {
float: left;
width: 50%;
height: auto;
margin: 5% 20% 5% 0%;
padding: 0% 0% 0% 0%;
}
#paragraph p {
background: rgba(200, 200, 200, 0.5);
width: 98%;
height: auto;
color: black;
padding: 1% 1% 1% 1%;
float: left;
overflow: hidden;
margin: 0% 1% 5% 0%;
text-align: center;
}
#paragraph .info {
width: 100%;
height: auto;
display: none;
float: left;
overflow: hidden;
transition: 0.5s ease-in-out;
background: rgba(255, 255, 255, 1);
border-radius: 0px 0px 10px 10px;
}
#paragraph h4 {
color: white;
background: rgba(50, 50, 50, 1);
width: 100%;
height: auto;
text-align: center;
padding: 1% 0% 1% 0%;
margin: -4% 0% 0% 0%;
float: left;
border-radius: 5px;
}
#paragraph2 {
float: left;
width: 50%;
height: auto;
margin: 0% 0% 0% 0%;
padding: 0% 0% 0% 0%;
}
#paragraph2 p {
background: rgba(200, 200, 255, 0.5);
width: 99%;
height: auto;
color: black;
padding: 1% 1% 1% 1%;
float: left;
overflow: hidden;
margin: 0% 1% 5% 0%;
text-align: center;
}
#paragraph2 .info {
width: 100%;
height: auto;
display: none;
float: left;
overflow: hidden;
transition: 0.5s ease-in-out;
background: rgba(255, 255, 255, 1);
border-radius: 0px 0px 10px 10px;
}
#paragraph2 h4 {
color: white;
background: rgba(50, 50, 50, 1);
width: 100%;
height: auto;
text-align: center;
padding: 1% 0% 1% 0%;
margin: -4% 0% 0% 0%;
float: left;
border-radius: 5px;
}<div id = "paragraph">
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse neque nisl, gravida vitae tellus a, commodo mattis risus. Pellentesque nec libero maximus, imperdiet justo tincidunt, placerat risus. Cras vitae neque tincidunt, sagittis turpis et,
tincidunt tortor. Sed sem lectus, suscipit at sollicitudin eget, euismod faucibus ex. Nam dignissim, est sit amet porttitor consectetur, tortor orci placerat augue, varius volutpat sem ante eget velit. Sed eget quam at nulla convallis pulvinar id
non eros. Pellentesque venenatis lacus at dolor varius, molestie imperdiet ex pretium. Vestibulum scelerisque quis mauris quis posuere. Duis vitae enim non mauris malesuada dictum. Morbi suscipit aliquet leo a maximus. Nunc faucibus ut urna nec rhoncus.
Proin semper ultricies rhoncus. Nulla efficitur rhoncus sollicitudin. Phasellus ac leo mi. Phasellus odio nulla, posuere ut ullamcorper quis, suscipit a erat. Phasellus sollicitudin iaculis ipsum, pretium mollis massa laoreet ut. </p>
<h4 onclick = "infobtn()"> More info</h4>
<div class = "info">
<h1> More info...</h1>
</div>
</div>
<div id = "paragraph2">
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse neque nisl, gravida vitae tellus a, commodo mattis risus. Pellentesque nec libero maximus, imperdiet justo tincidunt, placerat risus. Cras vitae neque tincidunt, sagittis turpis et,
tincidunt tortor. Sed sem lectus, suscipit at sollicitudin eget, euismod faucibus ex. Nam dignissim, est sit amet porttitor consectetur, tortor orci placerat augue, varius volutpat sem ante eget velit. Sed eget quam at nulla convallis pulvinar id
non eros. Pellentesque venenatis lacus at dolor varius, molestie imperdiet ex pretium. Vestibulum scelerisque quis mauris quis posuere. Duis vitae enim non mauris malesuada dictum. Morbi suscipit aliquet leo a maximus. Nunc faucibus ut urna nec rhoncus.
Proin semper ultricies rhoncus. Nulla efficitur rhoncus sollicitudin. Phasellus ac leo mi. Phasellus odio nulla, posuere ut ullamcorper quis, suscipit a erat. Phasellus sollicitudin iaculis ipsum, pretium mollis massa laoreet ut. </p>
<h4 onclick = "infobtn()"> More info</h4>
<div class = "info">
<h1> More info...</h1>
</div>
</div>Приношу свои извинения за отсутствие ясности. Div id = "class" должен был быть div class = "info". Приведенные выше решения работают очень хорошо. Однако когда я нажимаю «подробнее», открывается содержание обоих абзацев. Можно ли раскрыть содержание каждого абзаца индивидуально?
Что вы имеете в виду под «идентификаторами div с одним и тем же классом». Идентификаторы div не имеют классов, а div-ы имеют.