Я создаю ИТ-сайт и использую аккордеон для отображения услуг своих клиентов.Один нажимает на аккордеон, и он расширяется или сжимается, давая описание этой услуги.Я хочу добавить текст для чтения / чтения, который меняется в зависимости от того, открыт аккордеон или нет (что делается с помощью класса is-active. Я не могу изменить innerHTML
Подробнее
текст, потому что это дочерний элемент статьи "accordion is-active".
Я рассмотрел много решений, и они, похоже, не решают проблему, с которой я сталкиваюсь, потому что мне нужнополучить доступ только к дочернему классу элемента, если этот элемент имеет классы «accordion» и «is-active». Я попытался назначить тег Read More с class = "readSwitch" id = "readSwitch" переменной и изменитьэти переменныеклассы?
JavaScript
function readToggle() {
var x = document.getElementById("accordions");
var y = x.getElementsByClassName("accordion is-active");
var i;
for (i = 0; i < y.length; i++) {
var z = y[i].getElementsByClassName("readSwitch");
z.innerHTML = "Read Less";
console.log(z.innerHTML);
}
}
HTML
<section class="accordions" id="accordions">
<article class="accordion is-active">
<div class="accordion-header toggle" onclick="readToggle()">
<p>
Custom Built Computers
</p>
<p style="font-size:10px" class="readSwitch"
id="readSwitch">
Read More
</p>
</div>
<div class="accordion-body">
<div class="accordion-content">
blah blah blah
</div>
</div>
</article>
</section>
Проблема в том, что z - это копия y, поэтому ее изменение не обновляет DOM,Однако, когда я пытаюсь получить прямой доступ к внутреннему HTML-у, используя что-то вроде y [i] .getElementsByClassName ("readSwitch"). InnerHTML = "Read Less";Я получаю сообщение об ошибке «TypeError: y.getElementsByClassName не является функцией. (В« y.getElementsByClassName («readSwitch») »,« y.getElementsByClassName 'не определено) ».Есть ли способы напрямую изменить дочерние классы y innerHTML, используя что-то вроде y.readSwitch.innerHTML = "Read Less"?
РЕДАКТИРОВАТЬ РЕШЕНО !!!: Благодаря Джонатану Хейндлу я смог понять это.Я боролся с этой глупостью в течение 3 дней и не мог найти какие-либо решения в Интернете, поэтому я публикую свое решение Javascript для переключателя «читайте больше» здесь для других.Это решение работает с HTML выше.
document.onclick = function () {
//variables for accordions with is-active
var x = document.getElementById("accordions");
var y = x.getElementsByClassName("accordion is-active");
//variables for accordions with just accordion class, exclude those with "is-active"
var noless = document.querySelectorAll('article.accordion:not(.is-active)');
//Update all accordions with is-active to read less
var i;
for (i = 0; i < y.length; i++) {
y[i].getElementsByClassName("readSwitch")[0].innerHTML = "Read Less ↑";
}
//update accordions without is-active class to read more
var w;
for (w = 0; w < noless.length; w++) {
noless[w].getElementsByClassName("readSwitch")[0].innerHTML = "Read More ↓";
}
}