2013-01-07 26 views
0

我對什麼導致DOM異常12感到茫然。我能找到什麼是它必須處理無效的選擇器?從SVG中選擇節點作爲參數拋出DOM異常12

有關背景:

我們擁有的分佈圖是有很多在IT圈裏的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')

我們有機會獲得D3經由this.svg在懸停事件包裹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(」圈「)並確認節點e.currentTarget確實存在於該組中。

任何意見或幫助表示感謝,感謝您的時間。

回答

1

selection.select(selector)中的選擇器參數必須是字符串(例如'circle')或函數。在你的情況下,它似乎是一個DOM節點。

參見https://github.com/mbostock/d3/wiki/Selections#wiki-select

對於當前選擇的每個元素,選擇該指定的選擇字符串匹配的第一 派生元素。 ...

選擇器也可以指定爲返回 元素的函數,如果沒有匹配元素,則返回null。 ...

如果你有機會到一個節點,你可以將其轉換爲使用d3.select(node)一個D3選擇(https://github.com/mbostock/d3/wiki/Selections#wiki-d3_select)。

從你的描述看來,你只是想從e.currentTarget創建一個D3選擇;所以d3.select(e.currentTarget)就足夠了。

+0

啊,謝謝你,這讓一切都變得有意義了。我得到的是r2d3的要求,它說svg元素的選擇器需要從svg元素中選擇。如果您已經有了對節點的引用,那麼這是不必要的,因爲您無法像第一個節點那樣選擇節點。 – JamesH

相關問題