@Shimpanze

Почему метод forEach пропускает (не обрабатывает их) вложенные элементы?

Добрый день!

Имеется HTML-разметка:

<div>
  <span class="foo">Level 1.
    <span class="foo">Level 2.</span>
  </span>
  <br>
  <span class="foo">Level 1.
    <span class="foo">Level 2.</span>
  </span>
</div>


Необходимо обернуть все элементы с классом «.foo» в некую метку (в данном случае - «[e]...[/e]»).

Пишу соответствующий код:

[].forEach.call(document.querySelectorAll('span.foo'), function(e) {
  e.outerHTML = '[e]' + e.outerHTML + '[/e]';
});


Но он оборачивает элементы только верхнего уровня, а внутренние пропускает. То есть на выходе получается такое:

<div>
  [e]
    <span class="foo">Level 1.
      <span class="foo">Level 2.</span>
    </span>
  [/e]
  <br>
  [e]
    <span class="foo">Level 1.
      <span class="foo">Level 2.</span>
    </span>
  [/e]
</div>


А мне надо такое:

<div>
  [e]
    <span class="foo">Level 1.
      [e]
        <span class="foo">Level 2.</span>
      [/e]
    </span>
  [/e]
  <br>
  [e]
    <span class="foo">Level 1.
      [e]
        <span class="foo">Level 2.</span>
      [/e]
    </span>
  [/e]
</div>


Гугление навело на мысль, что здесь нужно использовать метод indexOf(). Но зачем он здесь и как его использовать, я так и не понял.

P.S. Я в курсе про «for(...)»,
P.P.S. Необходимо сделать именно на «forEach».

Спасибо!
  • Вопрос задан
  • 204 просмотра
Решения вопроса 1
@balamyt92
; select * from users; --
На самом деле все просто. outerHTML перезаписывает элемент, то есть когда вы записываете у родителя outerHTML, то ребенка на которого ссылается ранее сделанная ссылка уже не существует, там уже новый элемент.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы