#javascript #html
#язык JavaScript #HTML
Вопрос:
Как объединить два столбца текста в один с помощью JS, чтобы получилось вот так. Я знаю, что могу сделать это с помощью CSS, но дизайн сайта не позволяет этого сделать.
lt;div class="right-col col"gt; lt;spangt;1 line of the left columnlt;/spangt; lt;spangt;1 line of the right columnlt;/spangt; lt;spangt;2 line of the left columnlt;/spangt; lt;spangt;2 line of the right columnlt;/spangt; lt;spangt;3 line of the left columnlt;/spangt; lt;spangt;3 line of the right columnlt;/spangt; lt;spangt;4 line of the left columnlt;/spangt; lt;spangt;4 line of the right columnlt;/spangt; lt;/divgt;
Внутри строк span также могут быть теги, их следует сохранить.
Исходный код:
lt;div class="row"gt; lt;div class="left-col col"gt; lt;spangt;1 line of the left blocklt;/spangt; lt;spangt;2 line of the left blocklt;/spangt; lt;spangt;3 line of the left blocklt;/spangt; lt;spangt;4 line of the left blocklt;/spangt; lt;/divgt; lt;div class="right-col col"gt; lt;spangt;1 line of the right blocklt;/spangt; lt;spangt;2 line of the right blocklt;/spangt; lt;spangt;3 line of the right blocklt;/spangt; lt;spangt;4 line of the right blocklt;/spangt; lt;/divgt;
Ответ №1:
Вы можете сделать что-то вроде:
const left = document.querySelectorAll('.left-col span') const right = document.querySelectorAll('.right-col span') const row = document.querySelector('.row') left.forEach((e, i) =gt; { row.appendChild(e); row.appendChild(right[i]) }) document.querySelectorAll('.col').forEach(e =gt; e.remove())
span { display: block; }
lt;div class="row"gt; lt;div class="left-col col"gt; lt;spangt;1 line of the left blocklt;/spangt; lt;spangt;2 line of the left blocklt;/spangt; lt;spangt;3 line of the left blocklt;/spangt; lt;spangt;4 line of the left blocklt;/spangt; lt;/divgt; lt;div class="right-col col"gt; lt;spangt;1 line of the right blocklt;/spangt; lt;spangt;2 line of the right blocklt;/spangt; lt;spangt;3 line of the right blocklt;/spangt; lt;spangt;4 line of the right blocklt;/spangt; lt;/divgt; lt;/divgt;
Чтобы добавить .right-col
, вы можете сделать:
const left = document.querySelectorAll('.left-col span') const right = document.querySelectorAll('.right-col span') const rightCol = document.querySelector('.right-col') const leftCol = document.querySelector('.left-col') left.forEach((e, i) =gt; { rightCol.appendChild(e); rightCol.appendChild(right[i]) }) leftCol.remove()
span { display: block; }
lt;div class="row"gt; lt;div class="left-col col"gt; lt;spangt;1 line of the left blocklt;/spangt; lt;spangt;2 line of the left blocklt;/spangt; lt;spangt;3 line of the left blocklt;/spangt; lt;spangt;4 line of the left blocklt;/spangt; lt;/divgt; lt;div class="right-col col"gt; lt;spangt;1 line of the right blocklt;/spangt; lt;spangt;2 line of the right blocklt;/spangt; lt;spangt;3 line of the right blocklt;/spangt; lt;spangt;4 line of the right blocklt;/spangt; lt;/divgt; lt;/divgt;
Чтобы завернуть каждую span
пару в a div
, вы можете сделать:
const left = document.querySelectorAll('.left-col span') const right = document.querySelectorAll('.right-col span') const rightCol = document.querySelector('.right-col') const leftCol = document.querySelector('.left-col') left.forEach((e, i) =gt; { var div = document.createElement('div') div.appendChild(e); div.appendChild(right[i]) rightCol.appendChild(div) }) leftCol.remove()
span { display: block; } div{ border:1px solid; }
lt;div class="row"gt; lt;div class="left-col col"gt; lt;spangt;1 line of the left blocklt;/spangt; lt;spangt;2 line of the left blocklt;/spangt; lt;spangt;3 line of the left blocklt;/spangt; lt;spangt;4 line of the left blocklt;/spangt; lt;/divgt; lt;div class="right-col col"gt; lt;spangt;1 line of the right blocklt;/spangt; lt;spangt;2 line of the right blocklt;/spangt; lt;spangt;3 line of the right blocklt;/spangt; lt;spangt;4 line of the right blocklt;/spangt; lt;/divgt; lt;/divgt;
Комментарии:
1. Лучше сначала добавлять к фрагменту, а не непосредственно к DOM на каждой итерации. Также позволяет выполнить один
replaceChild
вызов наrow.parent
.2. Не могли бы вы рассказать, пожалуйста, как правильно вставить отображаемый результат в div.right-col в этом коде?
3. @Alex Я обновил свой ответ. См. Второй блок кода.
4. Извините за несколько вопросов, как мы можем завернуть эти два пролета
div
перед вставкой?5. @Alex Я обновил свой ответ. См. Третий блок кода.