Добрый день!
Имеется 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».
Спасибо!