I am able to do this:
<div id="myDiv">
<div class="foo"></div>
</div>
myDiv = getElementById("myDiv");
myDiv.querySelectorAll("#myDiv > .foo");
That is, I can successfully retrieve all the direct children of the myDiv
element that have class .foo
.
The problem is, it bothers me that I must include the #myDiv
in the selector, because I am running the query on the myDiv
element (so it is obviously redundant).
I ought to be able to leave the #myDiv
off, but then the selector is not legal syntax since it starts with a >
.
Does anyone know how to write a selector which gets just the direct children of the element that the selector is running on?
Does anyone know how to write a selector which gets just the direct children of the element that the selector is running on?
The correct way to write a selector that is "rooted" to the current element is to use :scope
.
var myDiv = getElementById("myDiv");
var fooEls = myDiv.querySelectorAll(":scope > .foo");
However, browser support is limited and you'll need a shim if you want to use it. I built scopedQuerySelectorShim for this purpose.