11

我试过了

d3.select(".cell:first")
d3.selectAll(".cell").filter(":first")
d3.selectAll(".cell").select(":first")

但两者都不起作用

4

2 回答 2

26

d3.select(".cell")已经选择了第一个匹配的元素:

选择与指定选择器字符串匹配的第一个元素,返回单元素选择。如果当前文档中没有元素匹配指定的选择器,则返回空选择。如果多个元素与选择器匹配,则仅选择第一个匹配的元素(按文档遍历顺序)。

来源:https ://github.com/mbostock/d3/wiki/Selections#wiki-d3_select

“我怎么才能拿到最后一件?

D3 似乎返回d3.selectAll()集合中的结果,定位在数组中。例如,请求d3 主页上的所有段落会导致:

[ 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>)。

于 2012-05-17T17:24:41.140 回答
4

如果要从 D3 的选择中获取第一个 DOM 元素,请使用.node()方法:

var sel = d3.selectAll('p'); // all <P>, wrapped with D3.selection
var el = sel.node(); // the first <P> element
于 2014-01-29T11:27:51.267 回答