我想匹配文档中所有h1
,除了包含其他div
的{{1}}之外,目前我可以h1
来获取所有{{具有演示类的querySelectorAll('h1:not(.demo))
除1}}。
但是我该怎么做h1
或类似的事情?
下面是一个示例html
h1
答案 0 :(得分:1)
这两种方法都可以
document.querySelectorAll('div:not(#demo) h1')
或此
document.querySelectorAll('h1:not(.demo)')
如果要将所有 h1 定位到没有类属性的位置,则可以这样做
document.querySelectorAll('h1:not([class])')
详细了解:not
答案 1 :(得分:0)
您可以先获取所有要匹配的divs ,然后从其中运行查询选择器:
const divsWhichArentDemo = document.querySelectorAll('div:not(#demo)');
const h1sWhichArentInDemoDivs = Array.prototype.slice.call(divsWhichArentDemo)
.map(div => Array.prototype.slice.call(div.querySelectorAll('h1')))
.flat();
console.dir(h1sWhichArentInDemoDivs);
<div>
<h1>First</h1>
<h1>Second</h1>
</div>
<div id="demo">
<h1 class="demo">Third</h1>
</div>
<div>
<h1>Fourth</h1>
</div>
答案 2 :(得分:0)
您可以使用>h1
let h1 = document.querySelectorAll('div:not(#demo)>h1');
console.log(h1);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div><h1>First</h1> <h1>Second</h1></div>
<div id="demo"><h1 class="demo">Third (demo)</h1></div>
<div><h1>Fourth</h1></div>
答案 3 :(得分:0)
您可以通过以下方式将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>