Индекс элемента определен только в коллекции. Когда вы выбираете только один элемент, нет никакой коллекции, и понятие индекса не определено. Например, вы можете создать несколько элементов g
, а затем применить различные операции к различным (перекрывающимся) подмножествам. Любой элемент g
будет иметь несколько индексов, в зависимости от вашего подмножества.
Чтобы сделать то, что вы пытаетесь достичь, вам нужно будет указать ссылку на конкретный выбор, который вы хотите использовать. Имея это и то, что идентифицирует элемент, вы можете сделать что-то подобное.
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())'? – meetamit
Да, это должно сработать. –
Выключает 'var index = selection.data(). IndexOf (d3.select (this.parentNode) .datum())' делает работу красиво. Спасибо вам обоим :-) – user1019696