Я, очевидно, могу это сделать:
d3.selectAll('div#some-div>ul')
Но что, если я использую DOM node или существующий выбор D3:
d3.select(this).selectAll('ul')
доставит мне все последующие UL. Итак, если
var div = d3.select('div')
получил мне этот node:
<div>
<ul>
<li>foo
<ul><li>bar</li></ul>
</li>
<ul>
</div>
Тогда
var uls = div.selectAll('ul')
получит мне два UL. Наверное, я мог бы отличить верхний уровень, например:
uls.filter(function() { return this.parentNode === div.node() }
Итак, я ответил на свой вопрос. Может быть, кому-то это будет полезно. Или, может быть, кто-то может рекомендовать менее уродливое решение.
nrabinowitz ответ ниже лучше и возвращает идентичные результаты моим выше. Здесь пересмотренная скрипка, которая их сравнивает (но не использует console.log, который действует для меня в jsfiddle)