Попарное объединение соседних блоков
Добрый день!
Помогите решить следующую задачу: имеется контейнер с вложенными в него блоками <div class="container"> <div class="item"></div> <div class="item"></div> <div class="item"></div> <div class="item"></div> <div class="item"></div> <div class="item"></div> <div class="item"></div> <div class="item"></div> ... </div> как попарно объединить их и затолкать в общий контейнер чтоб получилось так: <div class="container"> <div class="item-box"> <div class="item"></div> <div class="item"></div> </div> <div class="item-box"> <div class="item"></div> <div class="item"></div> </div> <div class="item-box"> <div class="item"></div> <div class="item"></div> </div> <div class="item-box"> <div class="item"></div> <div class="item"></div> </div> .... </div> |
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <script src="https://code.jquery.com/jquery-3.3.1.min.js"></script> </head> <body> <div class="container"> <div class="item">1</div> <div class="item">2</div> <div class="item">3</div> <div class="item">4</div> <div class="item">5</div> <div class="item">6</div> <div class="item">7</div> <div class="item">8</div> </div> <script> $('.item:nth-child(odd)').each(function(){ $(this).add($(this).next()).wrapAll('<div class="item-box"></div>'); }); </script> </body> </html> |
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <div class="container"> <div class="item">1</div> <div class="item">2</div> <div class="item">3</div> <div class="item">4</div> <div class="item">5</div> <div class="item">6</div> <div class="item">7</div> <div class="item">8</div> </div> <script> [].forEach.call(document.querySelectorAll('.item:nth-child(odd)'),function(el,i){ el.insertAdjacentHTML('beforebegin', '<div class="item-box"></div>'); var wrap = document.querySelectorAll('.item-box')[i]; var next = el.nextElementSibling; wrap.appendChild(el); wrap.appendChild(next); }); </script> </body> </html> |
стер пыль с этих ваших ренджей и документФрагментов )
минимум перестановок в дереве: http://jsfiddle.net/alexandroppolus/n9psfbrj/ в старые добрые времена эти трюки давали оптимизацию, как сейчас - не знаю.. |
всем спасибо, все предложенные методы отличноработают
|
Alexandroppolus,
:thanks: |
komned37,
Цитата:
<!DOCTYPE html> <html> <head> <title>Untitled</title> <meta charset="utf-8"> <style type="text/css"> div { padding: 5px 5px 0 5px; margin-bottom: 5px; min-height: 20px; } .container { border: 2px solid red; } .item-box { border: 2px solid green; } .item { background: blue; } </style> <script> window.addEventListener("DOMContentLoaded", function() { function wrapEach(element, wrapper, countToWrap, cls){ var container; [].forEach.call( document.querySelectorAll(element), function(el,i) { i % countToWrap || (container = document.createElement(wrapper), cls && container.classList.add(cls), el.parentNode.replaceChild(container,el)); container.appendChild(el); }); } wrapEach('.item','div',2,'item-box'); }) </script> </head> <body> <div class="container"> <div class="item"></div> <div class="item"></div> <div class="item"></div> <div class="item"></div> <div class="item"></div> <div class="item"></div> <div class="item"></div> <div class="item"></div> </div> </body> </html> |
Часовой пояс GMT +3, время: 16:37. |