I created function which create elements
function createElements(value) {
//Create div .toggler
const toggler = document.createElement('div');
toggler.classList.add('toggler');
//Create div .content
const content = document.createElement('div');
content.classList.add('content');
//Append div .toggler in div .container
container.append(toggler);
//Append div .content in div .container
container.append(content);
toggler.innerText = 'Click me';
content.innerText = value;
}
And function which should show and hide content if I'll click toggler 'Click me'
function toggleContent() {
//Get created elements
const togglers = document.querySelectorAll('.toggler'),
contents = document.querySelectorAll('.content');
//Toggle both div .active
togglers.forEach((toggler, index) => {
const content = contents[index];
//Get div .content height
const contentHeight = content.clientHeight + 'px';
//Set div .content height
content.style.height = '0px';
//Toggle event
toggler.addEventListener('click', () => {
if (!toggler.classList.contains('active')) {
toggler.classList.add('active');
} else {
toggler.classList.remove('active');
}
if (!content.classList.contains('active')) {
content.classList.add('active');
content.style.height = contentHeight;
} else {
content.classList.remove('active');
content.style.height = '0px';
}
});
});
}
Put these both functions in event of button
//Create html elements and set value inner them event
btn.addEventListener('click', () => {
createElements(input.value);
toggleContent();
//Clear input value
input.value = '';
// console.log(input.value);
});
All works fine, but if I add second element, first element toggler does not work
//Get html elements
const container = document.querySelector('.container'),
input = document.querySelector('.input'),
btn = document.querySelector('.btn');
function createElements(value) {
//Create div .toggler
const toggler = document.createElement('div');
toggler.classList.add('toggler');
//Create div .content
const content = document.createElement('div');
content.classList.add('content');
//Append div .toggler in div .container
container.append(toggler);
//Append div .content in div .container
container.append(content);
toggler.innerText = 'Click me';
content.innerText = value;
}
function toggleContent() {
//Get created elements
const togglers = document.querySelectorAll('.toggler'),
contents = document.querySelectorAll('.content');
//Toggle both div .active
togglers.forEach((toggler, index) => {
const content = contents[index];
//Get div .content height
const contentHeight = content.clientHeight + 'px';
//Set div .content height
content.style.height = '0px';
//Toggle event
toggler.addEventListener('click', () => {
if (!toggler.classList.contains('active')) {
toggler.classList.add('active');
} else {
toggler.classList.remove('active');
}
if (!content.classList.contains('active')) {
content.classList.add('active');
content.style.height = contentHeight;
} else {
content.classList.remove('active');
content.style.height = '0px';
}
});
});
}
//Create html elements and set value inner them event
btn.addEventListener('click', () => {
createElements(input.value);
toggleContent();
//Clear input value
input.value = '';
// console.log(input.value);
});
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
.content {
overflow: hidden;
}
<input type="text" class="input" />
<button class="btn">add</button>
<div class="container">
<!-- <div class="toggler"></div>
<div class="content"></div> -->
</div>