2013-11-26 2 views
3

Использование d3.js, если бы я после того, как (скажем) некоторое значение х родительского узла, я бы использовал:как получить индекс а ParentNode, я с помощью d3.js

d3.select(this.parentNode).datum().x 

Что я хотел бы , однако, является индексом данных (то есть данных). Предложения?

Спасибо!

ответ

7

Индекс элемента определен только в коллекции. Когда вы выбираете только один элемент, нет никакой коллекции, и понятие индекса не определено. Например, вы можете создать несколько элементов 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; 
}); 
+3

Эй, Ларс, вы думаете, что следующее будет работать (я не пробовал это)? 'var index = selection.data(). indexOf (d3.select (this.parentNode) .datum())'? – meetamit

+0

Да, это должно сработать. –

+0

Выключает 'var index = selection.data(). IndexOf (d3.select (this.parentNode) .datum())' делает работу красиво. Спасибо вам обоим :-) – user1019696

Смежные вопросы