Показать сообщение отдельно
  #6 (permalink)  
Старый 03.11.2020, 17:42
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,791

Работает только в вашем примере. Если 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>
Ответить с цитированием