I added “has” support, since before you could only have one element go 3 levels deep.
Input:
div#top >
el.second:has(div.three:contains("three")) +
el.second +
el.second >
span.three:contains("three")
Output:
<div id="top"> <el class="second"> <div class="three">three</div> </el> <el class="second"></el> <el class="second"> <span class="three">three</span> </el> </div>