3

I have simple JavaScript which may extend the element with class SLUZBY with an element with class EXTENDED-SLUZBY.

I need to have a working script on each element with class SLUZBY which will expand when the user clicks on it.

Is there any option on how I can make it as I wrote above?

var sluzba = document.getElementsByClassName('sluzba')
var extendedsluzba = document.getElementsByClassName('sluzba-extended')

sluzba.addEventListener('click', () => {
    extendedsluzba.classList.toggle('active')
})
.extended-sluzba {
display: none;
}

.extended-sluzba.active {
display: block;
}
<div class="sluzba">
  Sluzba01
   <div class="extended-sluzba">
    EXTENDED PART
   </div>
</div>

<div class="sluzba">
  Sluzba02
   <div class="extended-sluzba">
    EXTENDED PART
   </div>
</div>

<div class="sluzba">
  Sluzba03
   <div class="extended-sluzba">
    EXTENDED PART
   </div>
</div>

<div class="sluzba">
  Sluzba04
   <div class="extended-sluzba">
    EXTENDED PART
   </div>
</div>

1
  • getElementsByClassName returns an array of nodes, so you need to wrap the addEventListener and classList.toggle in a forEach loop Commented Jan 2, 2021 at 16:40

2 Answers 2

1

You can use below code its working and tested.

var sluzba = document.querySelectorAll('.sluzba')
var extendedsluzba = document.querySelectorAll('.extended-sluzba')

sluzba.forEach((e, i) => {
  e.addEventListener('click', () => {
      extendedsluzba[i].classList.toggle('active')
  })
})
  
.extended-sluzba {
display: none;
}

.extended-sluzba.active {
display: block;
}
<div class="sluzba">
  Sluzba01
   <div class="extended-sluzba">
    EXTENDED PART
   </div>
</div>

<div class="sluzba">
  Sluzba02
   <div class="extended-sluzba">
    EXTENDED PART
   </div>
</div>

<div class="sluzba">
  Sluzba03
   <div class="extended-sluzba">
    EXTENDED PART
   </div>
</div>

<div class="sluzba">
  Sluzba04
   <div class="extended-sluzba">
    EXTENDED PART
   </div>
</div>

Sign up to request clarification or add additional context in comments.

Comments

1

var sluzba = document.getElementsByClassName('sluzba') returns array of elements. Loop will do the trick:

var sluzba = document.getElementsByClassName('sluzba');
for (let i = 0; i < sluzba.length; i++) {
   sluzba[i].addEventListener('click', () => {
     extendedsluzba.classList.toggle('active');
   });
}

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.