Как говорили другие, это происходит потому, что ваша разметка недействительна. Если пойти еще глубже, проблема в том, что когда анализатор получил <a><div>
на своем входе, это может означать две вещи:
- Вы забыли закрыть тег привязки, в этом случае это должно стать
<a></a><div>...
в DOM или
- Якорь оборачивает div, в этом случае DOM должен быть
<a><div></div></a>
.
Правильное решение может быть принято только тогда, когда известно больше (потенциально гораздо больше) символов; анализ, как вы могли заметить, происходит постепенно - то есть вы можете увидеть части страницы до того, как она будет полностью загружена.
К сожалению, анализатор HTML в Mozilla (начиная с Firefox 3.6 и более ранних версий) в этом случае недетерминирован - итоговый DOM зависит от частей, на которые разбит ваш HTML при работе по сети.
Есть ошибка Mozilla о проблеме, которая очень похожа на вашу.
Я сожалею о вас, и я не знаю, как реализовать (и не имею никакого желания пытаться реализовать;) решение вашей первоначальной проблемы, но, возможно, взломать установку innerHTML
(чтобы избежать синтаксического анализа -детерминизм) в порядке?
Кстати, было бы интересно проверить, как алгоритм синтаксического анализа HTML5 говорит, что ваша разметка должна обрабатываться, поскольку именно это в конечном итоге будет реализовано в браузерах.