Создание «составного» элемента так же просто, как добавление одного или нескольких дочерних элементов к другому элементу. В вашем примере вы хотите связать свои данные с выбором <a>
элементов и дать каждому <a>
один дочерний элемент <circle>
.
Прежде всего, вам нужно выбрать "a.node"
вместо "circle.node"
. Это потому, что ваши гиперссылки будут родительскими элементами. Если нет очевидного родительского элемента, и вы просто хотите добавить несколько элементов для каждого элемента данных, используйте <g>
, групповой элемент SVG.
Затем вы хотите добавить один элемент <a>
к каждому узлу входящего выбора. Это создает ваши гиперссылки. После установки атрибутов каждой гиперссылки вы хотите дать ей <circle>
дочерний элемент. Просто: просто позвоните .append("circle")
.
var node = vis.selectAll("a.node")
.data(nodes);
// The entering selection: create the new <a> elements here.
// These elements are automatically part of the update selection in "node".
var nodeEnter = node.enter().append("a")
.attr("class", "node")
.attr("xlink:href", "http://whatever.com")
.call(force.drag);
// Appends a new <circle> element to each element in nodeEnter.
nodeEnter.append("circle")
.attr("r", 5)
.style("fill", function(d) { return fill(d.group); })
node.attr("transform", function(d) { return "translate(" + d.x + "," + d.y + ")"; });
Помните, что D3 в основном работает с выборками узлов. Таким образом, вызов .append()
для входящей выборки означает, что каждый узел в выборке получает новый дочерний элемент. Мощная штука!
И еще: в SVG есть свой собственный элемент <a>
, вот что Я имел в виду выше. Это отличается от HTML! Как правило, вы используете только элементы SVG с SVG и HTML с HTML.
Спасибо @mbostock за предложение уточнить имена переменных.
person
Jason Davies
schedule
11.02.2012