2017-04-11 160 views
3

什麼是CSS僞選擇器來選擇一個元素的自我?CSS僞選擇器來選擇querySelector內的當前元素?

例如,該不工作:

Array.prototype.map.call(document.querySelectorAll('.program_record_outer'), programBox => { 
    return programBox.querySelector('> div') 
}); 

拋出:DOMException:未能執行上 '元素' 'querySelector': '> DIV' 不是一個有效的選擇器。

但我相信,像這樣的:

Array.prototype.map.call(document.querySelectorAll('.program_record_outer'), programBox => { 
    return programBox.querySelector(':self > div') 
}); 

然而,:self也不是個事,並:root指文檔根目錄,所以我怎麼指當前情境?

+0

您是否在尋找'this'? – evolutionxbox

+0

@evolutionxbox':這'也不是一個有效的僞選擇器。 – mpen

+0

如果你正在尋找直接的孩子,爲什麼不使用'programBox.children'並通過'nodeType'過濾? – evolutionxbox

回答

7

在一些最新的瀏覽器(Chrome, Firefox 32+, Opera 15+, and Safari 7.0+),你可以使用呼叫​​選擇器querySelectorquerySelectorAll

let result = [...document.querySelectorAll('.program_record_outer')].map(
 
    programBox => programBox.querySelector(':scope > div') 
 
) 
 

 
console.log(result)
<div class="program_record_outer"> 
 
    <div>1</div> 
 
</div> 
 
<div class="program_record_outer"> 
 
    <div>2</div> 
 
</div> 
 
<div class="program_record_outer"> 
 
    <div>3</div> 
 
</div>

+0

範圍!而已。我知道有一件事,但我想不起它,谷歌沒有任何東西。將在〜10分鐘內接受。 – mpen

+0

但是爲什麼在DOM API執行時使用'querySelector'? – evolutionxbox

+0

@evolutionxbox只是提醒一下,這可能是[MCVE](http://stackoverflow.com/help/mcve),而不是OP的完整用例。無論如何,我認爲':範圍'是一件很好的事情,可以在某些情況下有用。 – gyre