Javascript D3和x27;s相对于父元素的鼠标坐标

Javascript D3和x27;s相对于父元素的鼠标坐标,javascript,d3.js,mouse,coordinates,Javascript,D3.js,Mouse,Coordinates,我想获取相对于父元素或DOM中除此之外的任何其他元素的鼠标坐标,但我一直在获取 Uncaught TypeError: Object [object Array] has no method 'getBoundingClientRect' d3.v3.min.js:1 H d3.v3.min.js:1 vo.mouse d3.v3.min.js:3 (anonymous function) index.html:291 (anonymous function) 我的代码: .on("mouse

我想获取相对于父元素或DOM中除
之外的任何其他元素的鼠标坐标,但我一直在获取

Uncaught TypeError: Object [object Array] has no method 'getBoundingClientRect' d3.v3.min.js:1
H d3.v3.min.js:1
vo.mouse d3.v3.min.js:3
(anonymous function) index.html:291
(anonymous function)
我的代码:

.on("mouseup", function(d){
    var th = d3.select( this );

    var coordinates = [0, 0];
    coordinates = d3.mouse( d3.select("body") );
    console.log( coordinates[1] );
    console.log( window );
    //th.attr("cy", d3.mouse),
    //d.newY = th.attr("cy");
    console.log(d);
});
就我所注意到的,我只能得到相对于我附加在(“mouseup”,…)事件侦听器上的元素的鼠标坐标


有没有一种方法可以获得这些相对于DOM中其他元素的坐标

您可以使用d3.event.pageX和d3.event.pageY。我使用的示例如下:

.on("mouseover", function(d){
        hover.transition().duration(200).style("opacity", .9);
        hover.html(new Date(d.creationDate)+": "+d.reactionTime).style("left", d3.event.pageX+"px").style("top", (d3.event.pageY - 28)+"px");
    });
需要DOM元素,而不是d3选择

d3.mouse(d3.select('body').node())
当然,选择身体更容易:

d3.mouse(document.body)
@Tom的回答也适用于您的情况,因为您需要相对于页面的位置,但如果您想要相对于其他容器的位置,则它不起作用

假设您希望将弹出窗口定位在用户单击的位置,并希望将其相对于svg元素定位,以便它与显示的其余部分平移

nodeEnter.on('click', function(d){
  var coordinates = d3.mouse(svg.node());
});

您是否尝试使用jQuery的
offset
方法?否,我知道我必须使用DOM占位符,如
this
this。parentNode
不是
jQuery
D3.js
的对象。这是正确的答案-让我们假设它被选中。只是好奇为什么
-28
?@Angular\u 10只是另一个神奇的数字:)pageX和pageY也不会给出与容器。