2 回答

TA貢獻(xiàn)1842條經(jīng)驗(yàn) 獲得超21個(gè)贊
不幸的是,:not只接受一個(gè)簡單的選擇器,因此:not([required] [content])匹配[content]不是子元素的選擇器[content]是行不通的。選擇元素后,您必須以編程方式過濾它們:
const notRequiredContents = [...document.querySelectorAll('[content]')]
.filter(elm => !elm.closest('[required]'));
console.log(notRequiredContents);
<div>
<div required>
<div content></div>
</div>
<div>
<div content></div>
</div>
</div>
理論上可以通過:not([required])與后代選擇器鏈接來僅使用查詢字符串來完成此操作,但它看起來非常丑陋且重復(fù),不應(yīng)該這樣做:
const notRequiredContents = document.querySelectorAll(`
body > :not([required]) > [content],
body > :not([required]) > :not([required]) > [content],
body > :not([required]) > :not([required]) > :not([required]) > [content],
body > :not([required]) > :not([required]) > :not([required]) > :not([required]) > [content]
`);
// continue above pattern for as much nesting as may exist
console.log(notRequiredContents[0], notRequiredContents.length);
<div>
<div required>
<div content>a</div>
</div>
<div>
<div content>b</div>
</div>
</div>

TA貢獻(xiàn)1847條經(jīng)驗(yàn) 獲得超7個(gè)贊
JS
const query = document.querySelectorAll('div :not([required]) [content]')
query.forEach((element) => {
console.log(element.innerHTML)
})
超文本標(biāo)記語言
<div>
<div required>
<div content>NO</div>
</div>
<div>
<div content>YES</div>
<div>
<div content>YES</div>
</div>
</div>
</div>
- 2 回答
- 0 關(guān)注
- 325 瀏覽
添加回答
舉報(bào)