http://jsfiddle.net/brunoperel/z6qfttmr/
我正在尝试动态创建元素,具体取决于点击的链接:
d3.select('#processes').selectAll('.processLaunch').data(helperProcessesData).enter()
.append('a')
.classed('processLaunch', true)
.attr('href', 'javascript:void(0)')
.text(function(d) { return d.text; })
.on('click', function(d) {
var currentProcess=d.name;
var filteredData = helperStepsData.filter(function(d) { return d.process === currentProcess; });
var helperStepsForProcess = d3.select('div#helperContainer').selectAll('.helperStep')
.data(filteredData);
console.log('Filtered data : '+JSON.stringify(filteredData));
console.log('Linked data : '+JSON.stringify(helperStepsForProcess.data()));
helperStepsForProcess.enter()
.append('div').text(function(d) { return 'Step '+d.step+' : '+d.title; });
helperStepsForProcess.exit().remove();
});
这里有(至少!)两件我不明白的事情:
.exit().remove()
,也不会删除过时的文本。为什么?console.log
数据时,它会返回一个对象数组,这很好。但是,在此之后的行中,我检索已绑定到元素的数据,我得到一个undefined
个对象的数组。为什么我也不能获得一系列对象?答案 0 :(得分:1)
我想你只是忘了在步骤中添加相应的类:
helperStepsForProcess.enter()
.append('div')
.attr('class', 'helperStep');
helperStepsForProcess.text(function(d) {
return 'Step '+d.step+' : '+d.title; });
在你的小提琴中添加它会返回预期的结果。
我希望这有帮助!