0

I would like to put every two li elements into a div in vanilla js. But I don't know wher is problem.

Thnks for help!

<ul>
   <li></li>
   <li></li>
   <li></li>
   <li></li>
   <li></li>
   <li></li>
</ul>

const items = [...document.querySelectorAll('ul li')];
for (let i = 0; i < items.length; i += 2) {
    const wrapper = document.createElement('div');
    items.slice(i, i += 4);
    items.parentNode.insertBefore(wrapper, items);
    wrapper.appendChild(items);
}

1 Answers1

1

You can use document.createElement to make a container on each iteration, then append some of the existing elements to it.

const container = document.getElementById('container');
const paragraphs = [...container.querySelectorAll('p')]; // or container.children
let incr = 2;
for (let i = 0; i < paragraphs.length; i += incr) {
  const div = document.createElement('div');
  for (const p of paragraphs.slice(i, i + incr)) div.append(p);
  container.append(div);
}
#container > div {
  border: 1px solid;
}
<div id="container">
   <p>text</p>
   <p>text</p>
   <p>text</p>
   <p>text</p>
   <p>text</p>
   <p>text</p>
</div>
Unmitigated
  • 76,500
  • 11
  • 62
  • 80