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