0
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
对象。为什么我不能获得一组对象呢?
你说得对,这是更好:如果我解决这个问题我没有得到额外的线路。 但是,[我没有看到正确的文本](http://jsfiddle.net/z6qfttmr/1/):如果您单击“启动过程2”,我看不到预期的文本“第一步第二个过程“,但是我看到”第一步“,这意味着第一个元素没有被新文本更新,尽管第二个元素像预期的那样被删除了。为什么? –
更新了小提琴,忘记把文本放在一些'更新'事件,而不是输入()。好吧? –
谢谢!我还没有意识到,更新的元素也必须使用text()来处理。 –