Хороший вопрос, но, как вы видите, нет способа сделать «комбинаторные корневые запросы», как их называет Джон Ресиг .
Однако в некоторых случаях вы можете просто пропустить myDiv.children
и использовать другие хорошие старомодные функции DOM API. Вместо неподдерживаемых myDiv.getElementsByClassName("foo")
вы можете просто написать .parentNode === myDiv
, например.
К сожалению, я не могу придумать способ справиться с ситуацией без добавления дополнительной пользовательской логики фильтра (например, найти :scope
чей ) и, очевидно, не идеально, если вы пытаетесь поддерживать один путь кода, который действительно просто хочет взять произвольную селекторную строку как ввод и список совпадений в качестве вывода! Но, если я, как и я, вы в конечном итоге задали этот вопрос просто потому, что вы застряли в мысли «все, что у вас было, это молоток», не забудьте, что есть множество других инструментов, предлагаемых DOM.var myDiv = getElementById("myDiv"); var fooEls = myDiv.querySelectorAll(":scope > .foo");