Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

querySelectorAll to include self

Tags:

javascript

<div class="a">
    <span class="a">a</span>
    <span class="a">b</span>
    <span class="a">c</span>
</div>

Assuming I have a variable called divA representing the top level div node. divA.querySelectorAll('.a') will return a list of the 3 span.as. I wonder if there's an easy way to return a list of 4 elements including the divA itself?

I know I could start from a higher level node, but let's assume there might be other .a elements that I don't want to mess with them.

In reality I still need to test whether divA matches my selector or not. So is there a way for css selector to test an element itself?

I could create a parent node and run querySelectorAll from there. But if there's an easier way, I don't need to go that far.

like image 215
Qian Chen Avatar asked Jan 21 '20 10:01

Qian Chen


1 Answers

I still need to test whether divA matches my selector or not. Is there a way for css selector to test an element itself?

querySelector() cannot return the context element it's running on.

What you can do is use @Andreas' solution followed by a filter()/matches() combo.

[divA, ...divA.querySelectorAll('.a')].filter(el => el.matches('.a'));
like image 190
Mitya Avatar answered Oct 08 '22 21:10

Mitya