Ваш HTML неверен. Используйте валидатор .
Элемент <p>
может не содержать элемент <hr>
, но конечный тег для элемента <p>
является необязательным.
Это означает, что элемент <p>
неявно оканчивается на <hr>
, а тег </p>
отбрасывается, поскольку он не соответствует открытому <p>
.
Полученный DOM выглядит так:
<p id="p2">before hr</p>
<hr/>
after hr
Поскольку элемент <hr>
и текстовый узел, следующий за ним, не находятся внутри абзаца, они не удаляются при удалении абзаца.
Ваш сокращенный контрольный пример был настолько уменьшен, что вывести правильную семантику для вашего контента невозможно, но, возможно, вам нужно что-то вроде:
<div id="p2">
<p>before hr</p>
<hr>
<p>after hr</p>
</div>