Задать вопрос
Cheizer
@Cheizer

Как на JQUERY обернуть каждые два элемента списка в тег?

Подскажите пожалуйста, как обернуть каждые два элемента в тег?

Например есть список
<div class="team">
 <div class="team_single">1</div>
<div class="team_single">2</div>
<div class="team_single">3</div>
<div class="team_single">4</div>
<div class="team_single">5</div>
<div class="team_single">6</div>
<div class="team_single">7</div>
<div class="team_single">8</div>
<div class="team_single">9</div>
<div class="team_single">10</div>
</div>


Пытаюсь обернуть каждые два блока в блок с классом NEW
$('.team .team_single').each(function (i, el) {
  $(el).wrap( function(){
   if(i:odd){
       return "<div class='new'></div>";
   }
   else{
       return "";
   }
 });
     });


В итоге хочу получить:
<div class="team">
<div class="new">
 <div class="team_single">1</div>
<div class="team_single">2</div>
</div>
<div class="new">
<div class="team_single">3</div>
<div class="team_single">4</div>
</div>
<div class="new">
<div class="team_single">5</div>
<div class="team_single">6</div>
</div>
<div class="new">
<div class="team_single">7</div>
<div class="team_single">8</div>
</div>
<div class="new">
<div class="team_single">9</div>
<div class="team_single">10</div>
</div>
</div>


Но не получается :( Подскажите решение пожалуйста!

  • Вопрос задан
  • 752 просмотра
Подписаться 1 Простой Комментировать
Решения вопроса 2
const divs = $(".team > .team_single");

for (let i = 0; i < divs.length; i += 2) {
  divs.slice(i, i + 2).wrapAll("<div class='new'></div>");
}
Ответ написан
0xD34F
@0xD34F Куратор тега JavaScript
Где элементы находятся, во что и по сколько надо оборачивать:

const parent = document.querySelector('.team');
const wrapperTag = 'div';
const wrapperClass = 'new';
const wrapSize = 2;

Оборачиваем:

parent.querySelectorAll(':scope > *').forEach((n, i) => {
  if (!(i % wrapSize)) {
    parent.appendChild(document.createElement(wrapperTag));
    parent.lastChild.classList.add(wrapperClass);
  }

  parent.lastChild.appendChild(n);
});

или

parent.append(...Array.from(
  { length: Math.ceil(parent.children.length / wrapSize) },
  () => {
    const wrapper = document.createElement(wrapperTag);
    wrapper.className = wrapperClass;
    wrapper.append(...Array.prototype.slice.call(parent.children, 0, wrapSize));
    return wrapper;
  }
));
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы