我试过
d3.select(".cell:first")
d3.selectAll(".cell").filter(":first")
d3.selectAll(".cell").select(":first")
但不起作用
答案 0 :(得分:26)
d3.select(".cell")
已经选择了第一个匹配的元素:
选择与指定选择器字符串匹配的第一个元素,返回单个元素选择。如果当前文档中没有元素与指定的选择器匹配,则返回空选择。如果多个元素与选择器匹配,则仅选择第一个匹配元素(以文档遍历顺序)。
来源:https://github.com/mbostock/d3/wiki/Selections#wiki-d3_select
D3似乎返回位于数组中的集合中d3.selectAll()
的结果。例如,请求d3 homepage上的所有段落都会导致:
[ Array[32] ] // An array with a single array child. Child has 32 paragraphs.
因此,如果我们想从该集合中获取最后一段,我们可以执行以下操作:
var paragraphs = d3.selectAll("p");
var lastParag = paragraphs[0].pop();
或者更简洁:
var obj = d3.select( d3.selectAll("p")[0].pop() );
:last-child
选择器与获取页面上的最后一个元素不同。此选择器将为您提供其父容器的最后一个子元素。请考虑以下标记:
<div id="foo">
<p>Hello</p>
<p>World</p>
<div>English</div>
</div>
<div id="bar">
<p>Oie</p>
<p>Mundo</p>
<div>Portuguese</div>
</div>
在此示例中,运行d3.select("p:last-child")
不会返回任何段落。即使d3.selectAll("p:last-child")
也不会。这些容器都没有最后一个子段是段落(它们是<div>
元素:<div>English</div>
和<div>Portuguese</div>
)。
答案 1 :(得分:4)
如果您想从D3的选择中获取第一个DOM元素,请使用.node()
方法:
var sel = d3.selectAll('p'); // all <P>, wrapped with D3.selection
var el = sel.node(); // the first <P> element