Как на jquery найти несколько элементов идущих подряд в DOM и обернуть их в контейнер?

312
29 июня 2017, 03:15

Есть следующий код:

<p>
   <img src.../>
   <img src.../>
</p>
<p>
   <img src.../>
   <img src.../>
   <img src.../>
</p>
<p>
   <img src.../>
</p>

Как с помощью jquery обернуть в контейнер те теги img, которые идут подряд чтобы стало так?

<p>
   <span class='set'>
      <img src.../>
      <img src.../>
   </span>
</p>
<p>
   <span class='set'>
      <img src.../>
      <img src.../>
      <img src.../>
   </span>
</p>
<p>
   <img src.../>
</p>

Есть метод wrapAll, но я не понимаю, что ему передать

$("???").wrapAll("<span class='set'>");

Если делать wrapAll по img+img он обернет второй, третий и последующие, но не первый, а p>img перенесет все шесть img в первый p.

Answer 1

$(function(){ 
$('pre').text("Исходный код: " + $('div').html()); 
 
// Перебор всех тегов "p" и "обвертывание" img'ов внутри каждого "p" отдельно. 
$("p").each(function(){  
    if ($(this).children("img").length > 1) $(this).children("img").wrapAll("<span class='set'>"); 
}); 
 
 
$('pre').text($('pre').text() + "Результат: " + $('div').html()); 
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
<pre> 
</pre> 
<div hidden> 
 
  <p> 
     <img src /> 
     <img src /> 
  </p> 
  <p> 
     <img src /> 
     <img src /> 
     <img src /> 
  </p> 
  <p> 
     <img src /> 
  </p> 
 
</div>

Answer 2

for(let image of document.images){ 
  const parent = image.parentNode; 
  if(parent.classList.contains('set')) continue; 
  const span = document.createElement('span'); 
  span.classList.add('set'); 
  parent.insertBefore(span, parent.firstChild); 
  for(let child_img of parent.getElementsByTagName('img')) 
      span.appendChild(child_img); 
}
p{ 
  border: 1px solid black; 
} 
.set{ 
  display: block; 
  border: 1px solid red; 
} 
 
img{ 
   width: 20px; height: 20px; 
}
<p> 
   <img src.../> 
   <img src.../> 
</p> 
<p> 
   <img src.../> 
   <img src.../> 
   <img src.../> 
</p> 
<p> 
   <img src.../> 
</p>

READ ALSO
Здравствуйте, как заменить input [type=submit] на button [type=submit]?

Здравствуйте, как заменить input [type=submit] на button [type=submit]?

Здравствуйте, как заменить input [type=submit] на button [type=submit] через javascript, input кнопки невидимы и обычным способом их не заменить, а требуется сделать...

388
Как работать с Promise?

Как работать с Promise?

ПриветДопустим, что я хочу вывести какой-то блок на странице:

415
Изменить caption в fancybox 3

Изменить caption в fancybox 3

Есть фотогалерея на facybox 3Нужно под каждым фото добавить блок, который содержит текст и ссылку

321