Удаление повторяющихся тегов
Привет.
у меня постятся записи. В них есть лишняя последовательность <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, время: 05:16. |