Удаление повторяющихся тегов
Привет.
у меня постятся записи. В них есть лишняя последовательность <div><br><br></div>. То есть получаются лишние переносы в начале и в конце. Либо много в середине. как удалить их, учитывая, что в начале и в конце строки их нужно удалить все, а в середине, если имеются, только 1. Пример: <div><br><br></div> <div><br><br></div> <div> Привет, сегодня воскресенье <br> Как ваши дела?</div> <div><br><br></div> <div><br><br></div> |
Почему не сделать это вручную один раз?
|
В смысле
|
Цитата:
Это же не какая-то последовательность букв и цифр появляющаяся волшебным образом, а либо шаблон, который используется для построения страницы, либо контент страницы, который хранится в файле/бд, либо какой-то файлик, хранящийся на сервере. Исправьте текст вручную и не придется лепить костыли, чтобы избавиться от мусора в верстке. |
-Nexus,
- |
Работает только в вашем примере. Если br вынести на отдельную строку, работать перестанет, т.к. br каким-то образом превратиться в text node.
<div><br><br></div> <div><br><br></div> <div> Привет, сегодня воскресенье <br><br> Как ваши дела?</div> <div><br><br></div> <div><br><br></div> <style>div {background: gray}</style> <script> document.querySelectorAll('* > br').forEach(br => { const container = br.parentNode; const children = container ? [].slice.call(container.childNodes) : []; if (!children.length) { return; } const isBreak = el => (typeof el === 'object') && (el instanceof HTMLBRElement); let prevElement = null; children.forEach((child, index) => { if (!isBreak(child)) { const isString = child.nodeType === Node.TEXT_NODE; const isElement = !isString && child.nodeType === Node.ELEMENT_NODE; if (isElement || isString && child.textContent.length) { prevElement = child; } return; } if (prevElement) { prevElement = null; return; } if (!prevElement || isBreak(prevElement)) { container.removeChild(child); } }); if (prevElement && isBreak(prevElement)) { container.removeChild(child); } }); </script> |
Часовой пояс GMT +3, время: 16:20. |