Dom 如何获取parentNode';s使用d3.js索引i

Dom 如何获取parentNode';s使用d3.js索引i,dom,d3.js,Dom,D3.js,使用d3.js,如果我在(比如)父节点的某个值x之后,我会使用: d3.select(this.parentNode).datum().x 不过,我想要的是数据索引。建议 谢谢 元素的索引仅在集合中定义良好。当您只选择单个元素时,就没有集合,索引的概念也没有真正定义。例如,您可以创建许多g元素,然后对不同的(重叠的)子集应用不同的操作。任何个人 g < /C>元素都有几个索引,这取决于所考虑的子集。 为了实现您想要实现的目标,您必须保留对您想要使用的特定选择的引用。有了这个和一些识别元素的东西

使用d3.js,如果我在(比如)父节点的某个值x之后,我会使用:

d3.select(this.parentNode).datum().x
不过,我想要的是数据索引。建议


谢谢

元素的索引仅在集合中定义良好。当您只选择单个元素时,就没有集合,索引的概念也没有真正定义。例如,您可以创建许多
g
元素,然后对不同的(重叠的)子集应用不同的操作。任何个人<代码> g < /C>元素都有几个索引,这取决于所考虑的子集。

为了实现您想要实现的目标,您必须保留对您想要使用的特定选择的引用。有了这个和一些识别元素的东西,你就可以这样做了

var value = d3.select(this.parentNode).datum().x;
var index = -1;
selection.each(function(d, i) { if(d.x == value) index = i; });
这依赖于具有唯一标识元素的属性

如果只有一个选择,只需将索引另存为另一个数据属性,以后再访问即可

var gs = d3.selectAll("g").data(data).append("g")
  .each(function(d, i) { d.index = i; });
var something = gs.append(...);
something.each(function() {
  d3.select(this.parentNode).datum().index;
});

元素的索引仅在集合中定义良好。当您只选择单个元素时,就没有集合,索引的概念也没有真正定义。例如,您可以创建许多
g
元素,然后对不同的(重叠的)子集应用不同的操作。任何个人<代码> g < /C>元素都有几个索引,这取决于所考虑的子集。

为了实现您想要实现的目标,您必须保留对您想要使用的特定选择的引用。有了这个和一些识别元素的东西,你就可以这样做了

var value = d3.select(this.parentNode).datum().x;
var index = -1;
selection.each(function(d, i) { if(d.x == value) index = i; });
这依赖于具有唯一标识元素的属性

如果只有一个选择,只需将索引另存为另一个数据属性,以后再访问即可

var gs = d3.selectAll("g").data(data).append("g")
  .each(function(d, i) { d.index = i; });
var something = gs.append(...);
something.each(function() {
  d3.select(this.parentNode).datum().index;
});

嘿,拉尔斯,你认为下面的方法行得通吗(我还没试过这个)
var index=selection.data().indexOf(d3.select(this.parentNode.datum())
?结果是
var index=selection.data().indexOf(d3.select(this.parentNode.datum())
做得很好。多亏了你们两位:-)selection.data().indexOf(d3.select(this.parentNode).datum()实际上只对直接父对象有效。公平地说,我不得不接受这个答案。对不起,这不是你想要的吗?只是一个小提示。此答案中的第二种方法仅适用于原始数据是对象而不是简单数字的情况。如果您的数据集只是一个数字数组,您可以首先使用JavaScript
map()
方法将其转换为一个对象数组
var index=selection.data().indexOf(d3.select(this.parentNode.datum())
?结果是
var index=selection.data().indexOf(d3.select(this.parentNode.datum())
做得很好。多亏了你们两位:-)selection.data().indexOf(d3.select(this.parentNode).datum()实际上只对直接父对象有效。公平地说,我不得不接受这个答案。对不起,这不是你想要的吗?只是一个小提示。此答案中的第二种方法仅适用于原始数据是对象而不是简单数字的情况。如果数据集只是一个数字数组,则可以首先使用JavaScript
map()
方法将其转换为一个对象数组。