Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to access the DOM element that correlates to a D3 SVG object?

I'm trying to learn D3 by experimenting with one of their basic bubblecharts. First task: figure out how to drag an bubble and have it become the topmost object while it's being dragged. (The problem is getting D3's object model to map onto the DOM, but I'll get there...)

To drag it, we can simply invoke d3's drag behavior using the code they provide:

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

Works great. Drags well. Now, how do we get it to be the topmost item? Search for "svg z-index" here and it becomes quickly apparent that the only way to change the index is to move an object further down in the DOM. OK. They don't make it easy because the individual bubbles don't have ID's, but messing around with the console, we can locate one of those bubble objects with:

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

and we can move it to the end of the containing svg element with:

.appendTo('svg') 

Drag it after you do that, and it's the top-most item. So far, so good, if you're working entirely within the DOM.

BUT: what I really want to do is have that happen automatically whenever a given object/bubble is being dragged. D3 provides a model for dragstart() and dragend() functions that will allow us to embed a statement to do what we want during the dragging process. And D3 provides the d3.select(this) syntax that allows us to access d3's object representation of the object/bubble you're currently dragging. But how do I cleanly turn that massive array they return into a reference to a DOM element that I can interact with and - for instance - move it to the end of the svg container, or perform other references in the DOM, such as form submission?

like image 325
XML Avatar asked Apr 26 '12 16:04

XML


People also ask

How is SVG used with D3?

SVG stands for Scalable Vector Graphics. SVG is an XML-based vector graphics format. It provides options to draw different shapes such as Lines, Rectangles, Circles, Ellipses, etc. Hence, designing visualizations with SVG gives you more power and flexibility.

Which tag is used for marking points in D3 using SVG?

An SVG line element is represented by <line> tag. A line's attributes are: x1: This is the x-coordinate of the first point. y1: This is the y-coordinate of the first point.

What is Dom in D3?

D3 allows us to manipulate DOM elements in the HTML document and for that we first need to select a particular element, or a group of elements and then manipulate those elements using various D3 methods. In this chapter, we will learn about selecting DOM elements using D3.


1 Answers

You can also get at the DOM element represented by a selection via selection.node() method

var selection = d3.select(domElement);  // later via the selection you can retrieve the element with .node() var elt = selection.node(); 
like image 174
Tom Dunn Avatar answered Oct 03 '22 09:10

Tom Dunn