1

我不知道是什么导致了 DOM 异常 12。我能找到的一点是它与无效的选择器有关吗?

背景:

我们有一个散点图,它是一个 SVG 对象,里面有很多圆圈。

当您将鼠标悬停在一个圆圈上时,我们希望能够访问它所代表的数据以显示工具提示。

目前我们正在通过主干监听事件(散点图属于更大的应用程序),因此我们可以通过e.currentTarget.

在第一次通过时,我们只是做了

d3.select(e.currentTarget) // from here we can access the datum() method

但是由于我们现在想使用 VML 兼容层r2d3,需要注意的是,如果我们想选择 SVG 中的元素,我们必须从 svg 中选择。

对 SVG 元素的查询必须来自 SVG 节点。示例使用 svg.select('rect') NOT d3.select('rect')

this.svg我们可以通过悬停事件访问 D3 包装的 SVG 元素。但是,当我打电话时:

this.svg.select(e.currentTarget)

我得到一个 DOM 异常 12。

Uncaught Error: SYNTAX_ERR: DOM Exception 12
    d3_select d3.v2.js:3578
    (anonymous function) d3.v2.js:372
    d3_selectionPrototype.select d3.v2.js:3606
    Backbone.View.extend.mouseEnterBin graph.js:828
    jQuery.each.jQuery.event.special.(anonymous function).handle jquery-1.7.2.js:3616
    jQuery.event.dispatch jquery-1.7.2.js:3332
    jQuery.event.add.elemData.handle.eventHandle

当我debugger;在尝试选择之前添加一行时,我可以 this.svg.selectAll('circle') 并确认该节点e.currentTarget确实存在于该集中。

任何建议或帮助表示赞赏,感谢您的时间。

4

1 回答 1

2

选择器参数selection.select(selector)必须是字符串(例如'circle')或函数。在您的情况下,它似乎是一个 DOM 节点。

请参阅https://github.com/mbostock/d3/wiki/Selections#wiki-select

对于当前选择中的每个元素,选择与指定选择器字符串匹配的第一个后代元素。...

选择器也可以指定为返回元素的函数,如果没有匹配的元素,则为 null。...

如果您有权访问某个节点,则可以使用d3.select(node)(https://github.com/mbostock/d3/wiki/Selections#wiki-d3_select) 将其转换为 d3 选择。

根据您的描述,您似乎只是想从 e.currentTarget 创建一个 D3 选择;这样d3.select(e.currentTarget)就足够了。

于 2013-01-08T00:13:03.663 回答