Javascript 使用D3进行DOM操作是否有优势?

Javascript 使用D3进行DOM操作是否有优势?,javascript,d3.js,dom,dom-events,Javascript,D3.js,Dom,Dom Events,我有一些Javascript代码,它使用HTML元素绘制地图。我想到了同时使用D3,但现在我注意到我只将其用于DOM操作,因为实际的绘图是由canvas API的函数执行的。例如,要创建一个简单的HTML滑块,我可以使用: let slider = d3.select('body').append('input') .attr('type', 'range') .attr('min', 0) .attr('max', 100); 不使用D3也可以实现同样的效果,使用:

我有一些Javascript代码,它使用HTML
元素绘制地图。我想到了同时使用D3,但现在我注意到我只将其用于DOM操作,因为实际的绘图是由canvas API的函数执行的。例如,要创建一个简单的HTML滑块,我可以使用:

let slider = d3.select('body').append('input')
    .attr('type', 'range')
    .attr('min', 0)
    .attr('max', 100);
不使用D3也可以实现同样的效果,使用:

let slider = document.createElement('INPUT');
    slider.setAttribute('type', 'range');
    slider.setAttribute('min', 0);
    slider.setAttribute('max', 100);

document.body.appendChild(slider);

我正在考虑在整个文档中用纯javascript替换所有DOM操作,但也许使用D3有一些我现在看不到的优点。此外,如果我想将事件处理程序附加到该滑块,比如
slider.oninput=updateFunction
这似乎只适用于纯JS,因为到目前为止,我还没有找到在D3方式中传递
e
参数的方法

虽然这可能有点基于观点。如果您只是为了一些DOM操作而使用D3,那么使用常规JS可能会更好。除非您更多地使用动态生成的
update-enter-append
流程,否则可能不需要什么。你的用户还需要下载约70kb的JS。与d3事件处理程序和获取事件一样,这是一个方便的指南。基本上,d3事件得到一个数据元素和一个索引,传统的DOM事件对象在d3.event中

d3.选择('div')。打开('click',函数(d,i){
//d是元素数据点(如果您有绑定数据)
const e=d3.event//d3将事件绑定到d3.event中
});