Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 23.07.2018, 11:38
Интересующийся
Отправить личное сообщение для komned37 Посмотреть профиль Найти все сообщения от komned37
 
Регистрация: 23.07.2018
Сообщений: 18

Попарное объединение соседних блоков
Добрый день!
Помогите решить следующую задачу:
имеется контейнер с вложенными в него блоками

<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>
Ответить с цитированием
  #2 (permalink)  
Старый 23.07.2018, 12:33
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

<!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>
Ответить с цитированием
  #3 (permalink)  
Старый 23.07.2018, 12:58
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

<!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>
Ответить с цитированием
  #4 (permalink)  
Старый 23.07.2018, 13:34
Аватар для Alexandroppolus
Профессор
Отправить личное сообщение для Alexandroppolus Посмотреть профиль Найти все сообщения от Alexandroppolus
 
Регистрация: 25.10.2016
Сообщений: 1,007

стер пыль с этих ваших ренджей и документФрагментов )

минимум перестановок в дереве:
http://jsfiddle.net/alexandroppolus/n9psfbrj/

в старые добрые времена эти трюки давали оптимизацию, как сейчас - не знаю..

Последний раз редактировалось Alexandroppolus, 23.07.2018 в 13:39.
Ответить с цитированием
  #5 (permalink)  
Старый 23.07.2018, 16:26
Интересующийся
Отправить личное сообщение для komned37 Посмотреть профиль Найти все сообщения от komned37
 
Регистрация: 23.07.2018
Сообщений: 18

всем спасибо, все предложенные методы отличноработают
Ответить с цитированием
  #6 (permalink)  
Старый 23.07.2018, 17:25
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,081

Alexandroppolus,
Ответить с цитированием
  #7 (permalink)  
Старый 23.07.2018, 17:27
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,081

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>
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Показывать по 5 блоков Meduzaweb Общие вопросы Javascript 2 29.03.2018 16:07
Скрипт выравнивания высоты блоков razorg1991 Элементы интерфейса 13 15.01.2017 00:04
Скрипт карусели блоков rozmakc Работа 3 25.07.2016 21:35
Переключение блоков. lon Элементы интерфейса 7 03.07.2013 09:08
Объединение нескольких блоков в аккордеон robertkein jQuery 0 07.05.2012 19:37