dom - 如何访问与 D3 SVG 对象相关的 DOM 元素?

标签 dom svg visualization data-visualization d3.js

我正在尝试通过尝试他们的 basic bubblecharts 之一来学习 D3 。第一个任务:弄清楚如何拖动气泡并使其在拖动时成为最上面的对象。 (问题是让 D3 的对象模型映射到 DOM,但我会到达那里......)

要拖动它,我们可以使用它们提供的代码简单地调用 d3 的拖动行为:

var drag = d3.behavior.drag()
    .on("dragstart", dragstart)
    .on("drag", dragmove)
    .on("dragend", dragend);

效果很好。拖得很好。现在,我们如何让它成为最上面的项目?在这里搜索“svg z-index”,很快就会发现更改索引的唯一方法是将对象在 DOM 中进一步向下移动。好的。它们并不容易,因为各个气泡没有 ID,但是通过控制台,我们可以通过以下方式找到其中一个气泡对象:

$("text:contains('TimeScale')").parent()

我们可以将它移动到包含 svg 元素的末尾:

.appendTo('svg')

完成此操作后将其拖动,它就会成为最顶部的项目。到目前为止,一切都很好,如果您完全在 DOM 内工作的话。

但是:我真正想做的是每当拖动给定的对象/气泡时自动发生这种情况。 D3 为 dragstart()dragend() 函数提供了一个模型,允许我们嵌入一条语句以在拖动过程中执行我们想要的操作。 D3 提供了 d3.select(this) 语法,允许我们访问您当前拖动的对象/气泡的 d3 对象表示。但是,我如何干净利落地将它们返回的庞大数组转换为对我可以与之交互的 DOM 元素的引用,例如将其移动到 svg 容器的末尾,或在 DOM 中执行其他引用,例如表单提交?

最佳答案

您还可以通过 selection.node() method 获取由选择表示的 DOM 元素

var selection = d3.select(domElement);

// later via the selection you can retrieve the element with .node()
var elt = selection.node();

关于dom - 如何访问与 D3 SVG 对象相关的 DOM 元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10337640/

相关文章:

javascript - 如何在不使用自定义触发器的情况下使用 jQuery 监听插入到 DOM 中的元素?

svg - 在 SVG 中绘制一个带有阴影的圆圈会剪裁边缘

python - 使用python制作气泡图动画

javascript - 旋转符号同时跟踪 anchor

javascript - 为什么文本不出现在 svg 矩形内

arrays - 使用 MATLAB 可视化立方晶格等三维阵列

python - Python 中矩形的可视化

reactjs - react 文本输入字段,重新渲染组件后,输入仍然保持旧值

javascript - 通过数组循环创建 li 并以列表形式显示到 HTML

javascript - 如何删除禁用属性和焦点输入 Angular 5?