我正在使用d3js创建一个按钮列表 - 我能够成功完成。
当您将鼠标悬停在按钮上时,我正在尝试添加一个X(关闭)按钮。然而,x出现在检查DOM时,x元素被绘制了无数次。
btnArray.forEach(function (button) {
const btn = document.createElement('div');
btn.type = 'button';
btn.value = button.name;
btn.onClick = evt => {
// do soemthing on click
}
btn.onmouseover = function(e) {
var me = d3.select(btn);
me.append('div')
.classed({'btn-close': true})
.text('x');
}
btn.onmouseout = function(e) {
var me = d3.select(btn);
me.selectAll('btn-close')
.remove();
}
});
答案 0 :(得分:0)
您看到"X"
无休止时间的原因是因为每次鼠标悬停都会附加该元素,但不会删除该元素。这就是原因:
您正在设置课程......
.classed({'btn-close': true})
但是你没有按班选择:
me.selectAll('btn-close')
应该是:
me.selectAll('.btn-close')
//class here--^
PS:这超出了您的问题的范围,但我想对您的代码进行一些考虑。请把它作为一种建设性的批评,这样你就可以写一个更惯用的D3:
document.createElement('div')
没有问题(顺便说一句,你错过了appendChild
),但你可以使用D3方法做到这一点。