获取d3.js中拖动元素的id

时间:2016-07-26 11:15:36

标签: d3.js reactjs

我可能有某种脑损伤,因为像这样的事情应该是微不足道的

我手动渲染了一堆svg圆圈(通过React)。然后我将d3拖动行为附加到所有这些行为。应用了拖动行为并且正在执行拖动功能,但是当我拖动其中一个圆圈时,我无法做出相应的响应,因为我不知道它们中的哪一个被移动了。 我在哪里可以获取拖动元素的ID

我已经检查了一些其他问题,发现了一些疯狂的过滤器解决方案......不可能。

我还偷看了docs并找到了subject属性..然而,在我尝试过的地方,那个是空的。

我的代码:

  componentWillUpdate() {
    let nodes = d3.selectAll("circle");

    const dragFn = (d,i) => {
      d3.event.sourceEvent.stopPropagation();
      this.props.onNodeDrag(I_NEED_AN_ID_HERE);
    }

    const dragBehavior = d3.behavior.drag();
    dragBehavior.on('drag', dragFn);
    dragBehavior.on('dragstart', () => {
      d3.event.sourceEvent.stopPropagation();
    });

    nodes.call(dragBehavior);
  }

1 个答案:

答案 0 :(得分:4)

我不知道你的“this”在函数内部是什么,但在普通的js中,你可以获得html元素的任何属性:

d3.select(this).attr("id"); //or class etc.

或者如果它被包裹

 d3.select(this).select("circle").attr("id");

以下是一个示例:http://jsfiddle.net/a2QpA/343/