Вы можете исключить div
из коллекции следующим образом: ':not(div) > h1'
:
var s = document.querySelectorAll(':not(div) > h1');
[...s].forEach((el) => el.innerHTML += ' changed');
<div >
<h1>h inside div 1</h1>
</div>
<h1>h outside div 1</h1>
<div id="d2">
<h1>h inside div 2</h1>
</div>
<h1>h outside div 2</h1>
Вы можете установить селектор ':not(#demo) > h1'
, тогда все h1
будут обработаны, кроме тех, которые внутри #demo
:
var s = document.querySelectorAll(':not(#demo) > h1');
[...s].forEach((el) => el.innerHTML += ' changed');
<div >
<h1>h inside div 1</h1>
</div>
<h1>h outside div 1</h1>
<div id="demo">
<h1>h inside div #demo</h1>
</div>
<h1>h outside div demo</h1>