Задать вопрос
@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».

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

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

Похожие вопросы