shivali
shivali

Reputation: 457

Z index in d3.js

  var edges = d3.selectAll('.edge');
  var allEllipse = d3.selectAll('ellipse');
  var allNodes = d3.selectAll('.node');
  var ellipseSelected; 
  var pathSelected;
  var parentNodeX;
  var parentNodeY;
  var relationshipName;
  var indexEdge;
  var fromData;
  var toData;
  //flag =1 ,when we have both src and trg
  var flag = 1;
  var data = 
[{"seq":"6", "start":"Delhi", "end":"", "rel":"" , "rows":"700"},{"seq":"1", "start":"Mumbai", "end":"Bangalore", "rel":" BLR-MUM-440 ", "rows":"300"}, {"seq":"2", "start":"Bangalore", "end":"Goa", "rel":" BLR-GOA-432 ", "rows":"11"},{"seq":"3", "start":"Goa", "end":"Jaipur", "rel":" GOA-JAI-884 ", "rows":"111"},{"seq":"4", "start":"Kolkatta", "end":"Bangalore", "rel":" BLR-KOL-228 " , "rows":"500"},{"seq":"5", "start":"Jaipur", "end":"Kolkatta", "rel":" JAI-KOL-743 " , "rows":"700"},{"seq":"6", "start":"Delhi", "end":"", "rel":"" , "rows":"999"}];
debugger;
function ellipseAdd()
  {
  
 
  //console.log("ellipse added");
  debugger
	  d3.select(ellipseSelected.parentNode) 
	  .append("ellipse")
	   .attr('cx', parentNodeX) //thisParentBBox.left + thisParentBBox.width/2)
	    .attr('cy', parentNodeY)
	                        .attr("rx", 15)
	                        .attr("ry", 7)
	                        .attr("stroke-width", 2)
	                        .attr("stroke", "white")
	 .style('fill', '#AB4B52')
	  d3.select(ellipseSelected.parentNode)
	  	.data([toData])
	    .append("text")
			.attr('x', parentNodeX-10) //thisParentBBox.left + thisParentBBox.width/2)
	    .attr('y', parentNodeY+4).text(0).style('fill','white')
	    .attr("font-size", "8px")
	    .transition()
	    .duration(3000)
	        .tween("text", function(d) {
	        debugger
	            var i = d3.interpolate(fromData, d),
	                prec = (d + "").split("."),
	                round = (prec.length > 1) ? Math.pow(10, prec[1].length) : 1;
							debugger
	            return function(t) {
	            
	                this.textContent = Math.round(i(t) * round) / round;
	            };
	        });
  	
   

  
  
  }
 function blinker()
{



	  if(flag==0)
		  {
		  	//for adding ellipse and text to it
		  ellipseAdd();
		  	
		  	//console.log("ellipse added done");
		  }
	  else{
		  //blink 3 things\
		  //ellipse
		  ellipseAdd();
		  //edgeTransition
      //console.log("ellipse added done now blinking"); 
      //console.log("blinkStartEdge" +indexEdge );
		  d3.select('#' + indexAndEdge[indexEdge].id + ' path')
		  .transition().style('stroke','grey').duration(300).style('opacity', 1)
		  .transition().style('stroke','red').style('stroke-width', 2)
		  .transition().duration(300).duration(300).style('opacity', 1)
		  .transition().style('stroke','grey').duration(300).style('opacity', 1)
		  .transition().style('stroke','red').style('stroke-width', 2)
		  .transition().duration(300).duration(300).style('opacity', 1)
		  .transition().style('stroke','grey').duration(300).style('opacity', 1)
		  .transition().style('stroke','red').style('stroke-width', 2)
		  .transition().duration(300).duration(300).style('opacity', 1)
		  .transition().style('stroke','grey').style('stroke-width',1) .duration(300).style('opacity', 1)
	      .transition().style('stroke','yellow').style('stroke-width', 1); //select current id from array
	       
	      }
	     
	    
		  
  	


	

		  
	  }
	  
  
  
  edges.style('opacity', 1);
  var indexAndEdge = [];
  var countOnNode = [];
  edges.each(function(d, i) {
 // debugger
    var thisEdgeCount = this.id.substring(4);
    indexAndEdge.push({ //push index you are at, the edge count worked out above and the id
      index: i,
      count: thisEdgeCount,
      id: this.id,
      //destination:String(this.childNodes[1].childNodes[0].nodeValue).split("->")[1],
      relation:this.childNodes[7].childNodes[0]
      	
    
    })
  });
  
    d3.selectAll('.node').each(function(d, i) {
  //debugger;
    var thisNodeCount	 = this.id;
    countOnNode.push({ //push index you are at, the edge count worked out above and the id
      id : thisNodeCount,
      prevData : 0,
      incrementData : 0
      
      	
    
    })
  });
  
  //debugger;
//for(var i=0 ; i< data.length ;i++)


var newCount =0

function timer() {
  setTimeout(function(d) {
  	
    if (newCount < data.length) { //if we havent gone through all edges
    
      debugger
      
      
      if(data[newCount].end.length==0)
		{
		flag = 0;
		for(jj=0;jj<allNodes[0].length;jj++)
			{
			//if sourseName matches
     // debugger;
			if(String(allNodes[0][jj].childNodes[5].childNodes[0].nodeValue)==data[newCount].start)
				{
        //console.log("yesss");
				ellipseSelected = d3.selectAll('.node')[0][jj].childNodes[3];
				
				parentNodeX = ellipseSelected.attributes.cx.value-ellipseSelected.attributes.rx.value +(2*ellipseSelected.attributes.rx.value) ;
			    parentNodeY =ellipseSelected.attributes.cy.value-(ellipseSelected.attributes.ry.value/2); 
				//send the data to interpolate
				//match id and update prevData ,incrementData 
				for( var l= 0 ; l  < countOnNode.length ; l++ )
					{
					if(countOnNode[l].id == d3.selectAll('.node')[0][jj].id )
						{
						countOnNode[l].prevData = countOnNode[l].incrementData;
						countOnNode[l].incrementData = data[newCount].rows;
						fromData = countOnNode[l].prevData ;
						toData   = countOnNode[l].incrementData;
						}
					}
				
				blinker();
				
				}
			}
		flag=1;
		}
	else
		{
			//check relation and targetNode
			//check target
			flag = 1;
			for(var j=0 ; j < allNodes[0].length ; j++ )
			{
				if(String(allNodes[0][j].childNodes[5].childNodes[0].nodeValue)==data[newCount].end)
				{
					ellipseSelected = d3.selectAll('.node')[0][j].childNodes[3];
					parentNodeX = ellipseSelected.attributes.cx.value-ellipseSelected.attributes.rx.value +(2*ellipseSelected.attributes.rx.value) ;
				    parentNodeY =ellipseSelected.attributes.cy.value-(ellipseSelected.attributes.ry.value/2); 
            
						for( var l= 0 ; l  < countOnNode.length ; l++ )
						{
						if(countOnNode[l].id == d3.selectAll('.node')[0][j].id )
							{
								countOnNode[l].prevData = countOnNode[l].incrementData;
								countOnNode[l].incrementData = data[newCount].rows;
								fromData = countOnNode[l].prevData ;
								toData   = countOnNode[l].incrementData;
							}
						}
					//set the edge by checking relation
						for(var k=0 ; k < indexAndEdge.length ; k++)
						{
							
						//if(edges[0][k].childNodes[7].childNodes[0] == indexAndEdge)
							if(data[newCount].rel == String(indexAndEdge[k].relation.nodeValue))
							{
								indexEdge = k;
							}
						}
					blinker();
					flag = 0;
				}
			}
		
		}


//allEllipse 

      newCount++;
      timer();
    } else {
   // count =0 ;
    timer()
      //console.log('end') //end
    }
  }, 3000)
}


timer();
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.4.11/d3.min.js"></script>
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
  <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
 "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
  <!-- Generated by graphviz version 2.38.0 (20140413.2041)
 -->
  <!-- Title: graphname Pages: 1 -->


  <svg width="708pt" height="305pt" viewBox="0.00 0.00 707.95 305.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
    <g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 301)">
      <title>graphname</title>
      <polygon fill="white" stroke="none" points="-4,4 -4,-301 703.946,-301 703.946,4 -4,4" />
      <!-- 0 -->
      <g id="node1" class="node">
        <title>0</title>
        <ellipse fill="#b2dfee" stroke="#b2dfee" cx="456.946" cy="-192" rx="40.0939" ry="18" />
        <text text-anchor="middle" x="456.946" y="-188.3" font-family="Times New Roman,serif" font-size="14.00">Mumbai</text>
      </g>
      <!-- 1 -->
      <g id="node2" class="node">
        <title>1</title>
        <ellipse fill="#b2dfee" stroke="#b2dfee" cx="399.946" cy="-18" rx="46.5926" ry="18" />
        <text text-anchor="middle" x="399.946" y="-14.3" font-family="Times New Roman,serif" font-size="14.00">Bangalore</text>
      </g>
      <!-- 0&#45;&gt;1 -->
      <g id="edge1" class="edge">
        <title>0&#45;&gt;1</title>
        <path fill="none" stroke="grey" d="M460.066,-163.558C462.067,-134.55 461.467,-88.3313 442.946,-54 438.559,-45.8673 431.415,-38.9123 424.2,-33.3953" />
        <polygon fill="grey" stroke="grey" points="456.557,-163.514 459.204,-173.773 463.532,-164.103 456.557,-163.514" />
        <text text-anchor="middle" x="509.946" y="-101.3" font-family="Times New Roman,serif" font-size="14.00"> BLR&#45;MUM&#45;440 </text>
      </g>
      <!-- 6 -->
      <g id="node7" class="node">
        <title>6</title>
        <ellipse fill="#b2dfee" stroke="#b2dfee" cx="339.946" cy="-105" rx="27" ry="18" />
        <text text-anchor="middle" x="339.946" y="-101.3" font-family="Times New Roman,serif" font-size="14.00">Goa</text>
      </g>
      <!-- 0&#45;&gt;6 -->
      <g id="edge6" class="edge">
        <title>0&#45;&gt;6</title>
        <path fill="none" stroke="grey" d="M406.617,-188.92C382.78,-185.106 356.24,-176.165 340.946,-156 333.916,-146.73 333.971,-133.465 335.621,-122.928" />
        <polygon fill="grey" stroke="grey" points="406.251,-192.402 416.627,-190.258 407.179,-185.464 406.251,-192.402" />
        <text text-anchor="middle" x="391.946" y="-144.8" font-family="Times New Roman,serif" font-size="14.00"> GOA&#45;MUM&#45;108 </text>
      </g>
      <!-- 2 -->
      <g id="node3" class="node">
        <title>2</title>
        <ellipse fill="#b2dfee" stroke="#b2dfee" cx="118.946" cy="-105" rx="37.0935" ry="18" />
        <text text-anchor="middle" x="118.946" y="-101.3" font-family="Times New Roman,serif" font-size="14.00">Cochin</text>
      </g>
      <!-- 3 -->
      <g id="node4" class="node">
        <title>3</title>
        <ellipse fill="#b2dfee" stroke="#b2dfee" cx="118.946" cy="-192" rx="32.4942" ry="18" />
        <text text-anchor="middle" x="118.946" y="-188.3" font-family="Times New Roman,serif" font-size="14.00">Jaipur</text>
      </g>
      <!-- 3&#45;&gt;2 -->
      <g id="edge8" class="edge">
        <title>3&#45;&gt;2</title>
        <path fill="none" stroke="grey" d="M118.946,-163.734C118.946,-150.419 118.946,-134.806 118.946,-123.175" />
        <polygon fill="grey" stroke="grey" points="115.446,-163.799 118.946,-173.799 122.446,-163.799 115.446,-163.799" />
        <text text-anchor="middle" x="162.446" y="-144.8" font-family="Times New Roman,serif" font-size="14.00"> COC&#45;JAI&#45;983 </text>
      </g>
      <!-- 3&#45;&gt;6 -->
      <g id="edge5" class="edge">
        <title>3&#45;&gt;6</title>
        <path fill="none" stroke="grey" d="M154.314,-176.995C170.385,-170.615 189.636,-162.951 206.946,-156 223.413,-149.388 227.386,-147.373 243.946,-141 268.615,-131.506 297.089,-121.207 316.581,-114.256" />
        <polygon fill="grey" stroke="grey" points="152.768,-173.843 144.763,-180.784 155.349,-180.35 152.768,-173.843" />
        <text text-anchor="middle" x="287.946" y="-144.8" font-family="Times New Roman,serif" font-size="14.00"> GOA&#45;JAI&#45;884 </text>
      </g>
      <!-- 4 -->
      <g id="node5" class="node">
        <title>4</title>
        <ellipse fill="#b2dfee" stroke="#b2dfee" cx="40.9464" cy="-279" rx="40.8928" ry="18" />
        <text text-anchor="middle" x="40.9464" y="-275.3" font-family="Times New Roman,serif" font-size="14.00">Kolkatta</text>
      </g>
      <!-- 4&#45;&gt;1 -->
      <g id="edge3" class="edge">
        <title>4&#45;&gt;1</title>
        <path fill="none" stroke="grey" d="M29.5176,-251.287C19.1406,-222.958 7.48741,-177.368 21.9464,-141 34.1426,-110.324 44.1274,-103.101 72.9464,-87 163.431,-36.4467 286.981,-23.3374 353.307,-20.029" />
        <polygon fill="grey" stroke="grey" points="26.3613,-252.829 33.2323,-260.894 32.8903,-250.305 26.3613,-252.829" />
        <text text-anchor="middle" x="68.4464" y="-144.8" font-family="Times New Roman,serif" font-size="14.00"> BLR&#45;KOL&#45;228 </text>
      </g>
      <!-- 4&#45;&gt;3 -->
      <g id="edge7" class="edge">
        <title>4&#45;&gt;3</title>
        <path fill="none" stroke="grey" d="M62.7013,-254.293C76.1886,-239.595 93.1216,-221.142 104.866,-208.344" />
        <polygon fill="grey" stroke="grey" points="59.8,-252.278 55.6176,-262.012 64.9576,-257.011 59.8,-252.278" />
        <text text-anchor="middle" x="127.446" y="-231.8" font-family="Times New Roman,serif" font-size="14.00"> JAI&#45;KOL&#45;743 </text>
      </g>
      <!-- 5 -->
      <g id="node6" class="node">
        <title>5</title>
        <ellipse fill="#b2dfee" stroke="#b2dfee" cx="522.946" cy="-279" rx="29.4969" ry="18" />
        <text text-anchor="middle" x="522.946" y="-275.3" font-family="Times New Roman,serif" font-size="14.00">Delhi</text>
      </g>
      <!-- 5&#45;&gt;0 -->
      <g id="edge4" class="edge">
        <title>5&#45;&gt;0</title>
        <path fill="none" stroke="grey" d="M492.042,-261.717C484.599,-256.574 477.27,-250.295 471.946,-243 464.895,-233.337 461.127,-220.345 459.132,-210.027" />
        <polygon fill="grey" stroke="grey" points="490.4,-264.82 500.718,-267.226 494.152,-258.911 490.4,-264.82" />
        <text text-anchor="middle" x="520.446" y="-231.8" font-family="Times New Roman,serif" font-size="14.00"> MUM&#45;DEL&#45;340 </text>
      </g>
      <!-- 5&#45;&gt;1 -->
      <g id="edge9" class="edge">
        <title>5&#45;&gt;1</title>
        <path fill="none" stroke="grey" d="M553.607,-261.01C559.788,-256.059 565.453,-250.047 568.946,-243 587.287,-205.999 727.222,-322.519 562.946,-87 535.932,-48.2704 482.434,-31.5297 444.09,-24.3379" />
        <polygon fill="grey" stroke="grey" points="551.149,-258.463 545.015,-267.101 555.197,-264.173 551.149,-258.463" />
        <text text-anchor="middle" x="654.446" y="-144.8" font-family="Times New Roman,serif" font-size="14.00"> BLR&#45;DEL&#45;270 </text>
      </g>
      <!-- 6&#45;&gt;1 -->
      <g id="edge2" class="edge">
        <title>6&#45;&gt;1</title>
        <path fill="none" stroke="grey" d="M340.326,-76.4424C341.465,-68.7133 343.716,-60.6211 347.946,-54 353.629,-45.1046 362.471,-37.9253 371.263,-32.4387" />
        <polygon fill="grey" stroke="grey" points="336.824,-76.3034 339.381,-86.5849 343.794,-76.9527 336.824,-76.3034" />
        <text text-anchor="middle" x="395.446" y="-57.8" font-family="Times New Roman,serif" font-size="14.00"> BLR&#45;GOA&#45;432 </text>
      </g>
    </g>

  </svg>

I have .svg file and i'm animating it using d3 and appending ellipse to the elements in .svg file. I want to place the ellipse over the .svg path. How to do that? In snippet ,ellipse added to node bangalore is below the path from Bangalore to Delhi. How to place every added ellipse to the node over path?

Upvotes: 3

Views: 1612

Answers (2)

thatOneGuy
thatOneGuy

Reputation: 10612

SVG doesn't support Z-Index so the order the elements are appended determine what zindex they are so to speak.

@Softwarenewbie7331 is correct but since your SVG is already determined you have to move the edges your self.

Here is the code to do this (vanilla JS) :

var theGraph = document.getElementById('graph0') //getContainer
var polygon = document.getElementsByTagName('polygon')[0] //getPolygon to insert after

var allEdgesJS = document.getElementsByClassName("edge"); //select all Edges
for (var i = 0; i < allEdgesJS.length; i++) { //Loop through edges to move
  theGraph.insertBefore(allEdgesJS[i], polygon.nextSibling); //insert after polygon

}

The above code works by looping through the edges and moving them one by one up the DOM before you create the ellipse's. I use the insertBefore (Documentation Here). To insert before everything in the container. But I customise this to insert after the polygon element by using .nextSibling (Documentation Here).

Here is the updated working fiddle, without all the annoying debuggers you left in :P : https://jsfiddle.net/thatOneGuy/ng0pt0m0/1/

Working code incase fiddle is down :

var edges = d3.selectAll('.edge');
var allEllipse = d3.selectAll('ellipse');
var allNodes = d3.selectAll('.node');
var ellipseSelected;
var pathSelected;
var parentNodeX;
var parentNodeY;
var relationshipName;
var indexEdge;
var fromData;
var toData;
//flag =1 ,when we have both src and trg
var flag = 1;
var data = [{
  "seq": "6",
  "start": "Delhi",
  "end": "",
  "rel": "",
  "rows": "700"
}, {
  "seq": "1",
  "start": "Mumbai",
  "end": "Bangalore",
  "rel": " BLR-MUM-440 ",
  "rows": "300"
}, {
  "seq": "2",
  "start": "Bangalore",
  "end": "Goa",
  "rel": " BLR-GOA-432 ",
  "rows": "11"
}, {
  "seq": "3",
  "start": "Goa",
  "end": "Jaipur",
  "rel": " GOA-JAI-884 ",
  "rows": "111"
}, {
  "seq": "4",
  "start": "Kolkatta",
  "end": "Bangalore",
  "rel": " BLR-KOL-228 ",
  "rows": "500"
}, {
  "seq": "5",
  "start": "Jaipur",
  "end": "Kolkatta",
  "rel": " JAI-KOL-743 ",
  "rows": "700"
}, {
  "seq": "6",
  "start": "Delhi",
  "end": "",
  "rel": "",
  "rows": "999"
}];
//debugger; 

var theGraph = document.getElementById('graph0')
var polygon = document.getElementsByTagName('polygon')[0]

var allEdgesJS = document.getElementsByClassName("edge"); // order: first, second, third
for (var i = 0; i < allEdgesJS.length; i++) {
  theGraph.insertBefore(allEdgesJS[i], polygon.nextSibling); // order: third, first, second

}




function ellipseAdd() {


  //console.log("ellipse added");
  // debugger
  d3.select(ellipseSelected.parentNode)
    .append("ellipse")
    .attr('cx', parentNodeX) //thisParentBBox.left + thisParentBBox.width/2)
    .attr('cy', parentNodeY)
    .attr("rx", 15)
    .attr("ry", 7)
    .attr("stroke-width", 2)
    .attr("stroke", "white")
    .style('fill', '#AB4B52')
  d3.select(ellipseSelected.parentNode)
    .data([toData])
    .append("text")
    .attr('x', parentNodeX - 10) //thisParentBBox.left + thisParentBBox.width/2)
    .attr('y', parentNodeY + 4).text(0).style('fill', 'white')
    .attr("font-size", "8px")
    .transition()
    .duration(3000)
    .tween("text", function(d) {
      //debugger
      var i = d3.interpolate(fromData, d),
        prec = (d + "").split("."),
        round = (prec.length > 1) ? Math.pow(10, prec[1].length) : 1;
      //debugger
      return function(t) {

        this.textContent = Math.round(i(t) * round) / round;
      };
    });





}

function blinker() {



  if (flag == 0) {
    //for adding ellipse and text to it
    ellipseAdd();

    //console.log("ellipse added done");
  } else {
    //blink 3 things\
    //ellipse
    ellipseAdd();
    //edgeTransition
    //console.log("ellipse added done now blinking"); 
    //console.log("blinkStartEdge" +indexEdge );
    d3.select('#' + indexAndEdge[indexEdge].id + ' path')
      .transition().style('stroke', 'grey').duration(300).style('opacity', 1)
      .transition().style('stroke', 'red').style('stroke-width', 2)
      .transition().duration(300).duration(300).style('opacity', 1)
      .transition().style('stroke', 'grey').duration(300).style('opacity', 1)
      .transition().style('stroke', 'red').style('stroke-width', 2)
      .transition().duration(300).duration(300).style('opacity', 1)
      .transition().style('stroke', 'grey').duration(300).style('opacity', 1)
      .transition().style('stroke', 'red').style('stroke-width', 2)
      .transition().duration(300).duration(300).style('opacity', 1)
      .transition().style('stroke', 'grey').style('stroke-width', 1).duration(300).style('opacity', 1)
      .transition().style('stroke', 'yellow').style('stroke-width', 1); //select current id from array

  }









}



edges.style('opacity', 1);
var indexAndEdge = [];
var countOnNode = [];
edges.each(function(d, i) {
  // debugger
  var thisEdgeCount = this.id.substring(4);
  indexAndEdge.push({ //push index you are at, the edge count worked out above and the id
    index: i,
    count: thisEdgeCount,
    id: this.id,
    //destination:String(this.childNodes[1].childNodes[0].nodeValue).split("->")[1],
    relation: this.childNodes[7].childNodes[0]


  })
});

d3.selectAll('.node').each(function(d, i) {
  //debugger;
  var thisNodeCount = this.id;
  countOnNode.push({ //push index you are at, the edge count worked out above and the id
    id: thisNodeCount,
    prevData: 0,
    incrementData: 0



  })
});

//debugger;
//for(var i=0 ; i< data.length ;i++)


var newCount = 0

function timer() {
  setTimeout(function(d) {

    if (newCount < data.length) { //if we havent gone through all edges

      // debugger


      if (data[newCount].end.length == 0) {
        flag = 0;
        for (jj = 0; jj < allNodes[0].length; jj++) {
          //if sourseName matches
          // debugger;
          if (String(allNodes[0][jj].childNodes[5].childNodes[0].nodeValue) == data[newCount].start) {
            //console.log("yesss");
            ellipseSelected = d3.selectAll('.node')[0][jj].childNodes[3];

            parentNodeX = ellipseSelected.attributes.cx.value - ellipseSelected.attributes.rx.value + (2 * ellipseSelected.attributes.rx.value);
            parentNodeY = ellipseSelected.attributes.cy.value - (ellipseSelected.attributes.ry.value / 2);
            //send the data to interpolate
            //match id and update prevData ,incrementData 
            for (var l = 0; l < countOnNode.length; l++) {
              if (countOnNode[l].id == d3.selectAll('.node')[0][jj].id) {
                countOnNode[l].prevData = countOnNode[l].incrementData;
                countOnNode[l].incrementData = data[newCount].rows;
                fromData = countOnNode[l].prevData;
                toData = countOnNode[l].incrementData;
              }
            }

            blinker();

          }
        }
        flag = 1;
      } else {
        //check relation and targetNode
        //check target
        flag = 1;
        for (var j = 0; j < allNodes[0].length; j++) {
          if (String(allNodes[0][j].childNodes[5].childNodes[0].nodeValue) == data[newCount].end) {
            ellipseSelected = d3.selectAll('.node')[0][j].childNodes[3];
            parentNodeX = ellipseSelected.attributes.cx.value - ellipseSelected.attributes.rx.value + (2 * ellipseSelected.attributes.rx.value);
            parentNodeY = ellipseSelected.attributes.cy.value - (ellipseSelected.attributes.ry.value / 2);

            for (var l = 0; l < countOnNode.length; l++) {
              if (countOnNode[l].id == d3.selectAll('.node')[0][j].id) {
                countOnNode[l].prevData = countOnNode[l].incrementData;
                countOnNode[l].incrementData = data[newCount].rows;
                fromData = countOnNode[l].prevData;
                toData = countOnNode[l].incrementData;
              }
            }
            //set the edge by checking relation
            for (var k = 0; k < indexAndEdge.length; k++) {

              //if(edges[0][k].childNodes[7].childNodes[0] == indexAndEdge)
              if (data[newCount].rel == String(indexAndEdge[k].relation.nodeValue)) {
                indexEdge = k;
              }
            }
            blinker();
            flag = 0;
          }
        }

      }


      //allEllipse 

      newCount++;
      timer();
    } else {
      // count =0 ;
      timer()
        //console.log('end') //end
    }
  }, 3000)
}


timer();
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.4.11/d3.min.js"></script>
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
  <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
 "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
  <!-- Generated by graphviz version 2.38.0 (20140413.2041)
 -->
  <!-- Title: graphname Pages: 1 -->


  <svg width="708pt" height="305pt" viewBox="0.00 0.00 707.95 305.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
    <g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 301)">
      <title>graphname</title>
      <polygon fill="white" stroke="none" points="-4,4 -4,-301 703.946,-301 703.946,4 -4,4" />
      <!-- 0 -->
      <g id="node1" class="node">
        <title>0</title>
        <ellipse fill="#b2dfee" stroke="#b2dfee" cx="456.946" cy="-192" rx="40.0939" ry="18" />
        <text text-anchor="middle" x="456.946" y="-188.3" font-family="Times New Roman,serif" font-size="14.00">Mumbai</text>
      </g>
      <!-- 1 -->
      <g id="node2" class="node">
        <title>1</title>
        <ellipse fill="#b2dfee" stroke="#b2dfee" cx="399.946" cy="-18" rx="46.5926" ry="18" />
        <text text-anchor="middle" x="399.946" y="-14.3" font-family="Times New Roman,serif" font-size="14.00">Bangalore</text>
      </g>
      <!-- 0&#45;&gt;1 -->
      <g id="edge1" class="edge">
        <title>0&#45;&gt;1</title>
        <path fill="none" stroke="grey" d="M460.066,-163.558C462.067,-134.55 461.467,-88.3313 442.946,-54 438.559,-45.8673 431.415,-38.9123 424.2,-33.3953" />
        <polygon fill="grey" stroke="grey" points="456.557,-163.514 459.204,-173.773 463.532,-164.103 456.557,-163.514" />
        <text text-anchor="middle" x="509.946" y="-101.3" font-family="Times New Roman,serif" font-size="14.00"> BLR&#45;MUM&#45;440 </text>
      </g>
      <!-- 6 -->
      <g id="node7" class="node">
        <title>6</title>
        <ellipse fill="#b2dfee" stroke="#b2dfee" cx="339.946" cy="-105" rx="27" ry="18" />
        <text text-anchor="middle" x="339.946" y="-101.3" font-family="Times New Roman,serif" font-size="14.00">Goa</text>
      </g>
      <!-- 0&#45;&gt;6 -->
      <g id="edge6" class="edge">
        <title>0&#45;&gt;6</title>
        <path fill="none" stroke="grey" d="M406.617,-188.92C382.78,-185.106 356.24,-176.165 340.946,-156 333.916,-146.73 333.971,-133.465 335.621,-122.928" />
        <polygon fill="grey" stroke="grey" points="406.251,-192.402 416.627,-190.258 407.179,-185.464 406.251,-192.402" />
        <text text-anchor="middle" x="391.946" y="-144.8" font-family="Times New Roman,serif" font-size="14.00"> GOA&#45;MUM&#45;108 </text>
      </g>
      <!-- 2 -->
      <g id="node3" class="node">
        <title>2</title>
        <ellipse fill="#b2dfee" stroke="#b2dfee" cx="118.946" cy="-105" rx="37.0935" ry="18" />
        <text text-anchor="middle" x="118.946" y="-101.3" font-family="Times New Roman,serif" font-size="14.00">Cochin</text>
      </g>
      <!-- 3 -->
      <g id="node4" class="node">
        <title>3</title>
        <ellipse fill="#b2dfee" stroke="#b2dfee" cx="118.946" cy="-192" rx="32.4942" ry="18" />
        <text text-anchor="middle" x="118.946" y="-188.3" font-family="Times New Roman,serif" font-size="14.00">Jaipur</text>
      </g>
      <!-- 3&#45;&gt;2 -->
      <g id="edge8" class="edge">
        <title>3&#45;&gt;2</title>
        <path fill="none" stroke="grey" d="M118.946,-163.734C118.946,-150.419 118.946,-134.806 118.946,-123.175" />
        <polygon fill="grey" stroke="grey" points="115.446,-163.799 118.946,-173.799 122.446,-163.799 115.446,-163.799" />
        <text text-anchor="middle" x="162.446" y="-144.8" font-family="Times New Roman,serif" font-size="14.00"> COC&#45;JAI&#45;983 </text>
      </g>
      <!-- 3&#45;&gt;6 -->
      <g id="edge5" class="edge">
        <title>3&#45;&gt;6</title>
        <path fill="none" stroke="grey" d="M154.314,-176.995C170.385,-170.615 189.636,-162.951 206.946,-156 223.413,-149.388 227.386,-147.373 243.946,-141 268.615,-131.506 297.089,-121.207 316.581,-114.256" />
        <polygon fill="grey" stroke="grey" points="152.768,-173.843 144.763,-180.784 155.349,-180.35 152.768,-173.843" />
        <text text-anchor="middle" x="287.946" y="-144.8" font-family="Times New Roman,serif" font-size="14.00"> GOA&#45;JAI&#45;884 </text>
      </g>
      <!-- 4 -->
      <g id="node5" class="node">
        <title>4</title>
        <ellipse fill="#b2dfee" stroke="#b2dfee" cx="40.9464" cy="-279" rx="40.8928" ry="18" />
        <text text-anchor="middle" x="40.9464" y="-275.3" font-family="Times New Roman,serif" font-size="14.00">Kolkatta</text>
      </g>
      <!-- 4&#45;&gt;1 -->
      <g id="edge3" class="edge">
        <title>4&#45;&gt;1</title>
        <path fill="none" stroke="grey" d="M29.5176,-251.287C19.1406,-222.958 7.48741,-177.368 21.9464,-141 34.1426,-110.324 44.1274,-103.101 72.9464,-87 163.431,-36.4467 286.981,-23.3374 353.307,-20.029" />
        <polygon fill="grey" stroke="grey" points="26.3613,-252.829 33.2323,-260.894 32.8903,-250.305 26.3613,-252.829" />
        <text text-anchor="middle" x="68.4464" y="-144.8" font-family="Times New Roman,serif" font-size="14.00"> BLR&#45;KOL&#45;228 </text>
      </g>
      <!-- 4&#45;&gt;3 -->
      <g id="edge7" class="edge">
        <title>4&#45;&gt;3</title>
        <path fill="none" stroke="grey" d="M62.7013,-254.293C76.1886,-239.595 93.1216,-221.142 104.866,-208.344" />
        <polygon fill="grey" stroke="grey" points="59.8,-252.278 55.6176,-262.012 64.9576,-257.011 59.8,-252.278" />
        <text text-anchor="middle" x="127.446" y="-231.8" font-family="Times New Roman,serif" font-size="14.00"> JAI&#45;KOL&#45;743 </text>
      </g>
      <!-- 5 -->
      <g id="node6" class="node">
        <title>5</title>
        <ellipse fill="#b2dfee" stroke="#b2dfee" cx="522.946" cy="-279" rx="29.4969" ry="18" />
        <text text-anchor="middle" x="522.946" y="-275.3" font-family="Times New Roman,serif" font-size="14.00">Delhi</text>
      </g>
      <!-- 5&#45;&gt;0 -->
      <g id="edge4" class="edge">
        <title>5&#45;&gt;0</title>
        <path fill="none" stroke="grey" d="M492.042,-261.717C484.599,-256.574 477.27,-250.295 471.946,-243 464.895,-233.337 461.127,-220.345 459.132,-210.027" />
        <polygon fill="grey" stroke="grey" points="490.4,-264.82 500.718,-267.226 494.152,-258.911 490.4,-264.82" />
        <text text-anchor="middle" x="520.446" y="-231.8" font-family="Times New Roman,serif" font-size="14.00"> MUM&#45;DEL&#45;340 </text>
      </g>
      <!-- 5&#45;&gt;1 -->
      <g id="edge9" class="edge">
        <title>5&#45;&gt;1</title>
        <path fill="none" stroke="grey" d="M553.607,-261.01C559.788,-256.059 565.453,-250.047 568.946,-243 587.287,-205.999 727.222,-322.519 562.946,-87 535.932,-48.2704 482.434,-31.5297 444.09,-24.3379" />
        <polygon fill="grey" stroke="grey" points="551.149,-258.463 545.015,-267.101 555.197,-264.173 551.149,-258.463" />
        <text text-anchor="middle" x="654.446" y="-144.8" font-family="Times New Roman,serif" font-size="14.00"> BLR&#45;DEL&#45;270 </text>
      </g>
      <!-- 6&#45;&gt;1 -->
      <g id="edge2" class="edge">
        <title>6&#45;&gt;1</title>
        <path fill="none" stroke="grey" d="M340.326,-76.4424C341.465,-68.7133 343.716,-60.6211 347.946,-54 353.629,-45.1046 362.471,-37.9253 371.263,-32.4387" />
        <polygon fill="grey" stroke="grey" points="336.824,-76.3034 339.381,-86.5849 343.794,-76.9527 336.824,-76.3034" />
        <text text-anchor="middle" x="395.446" y="-57.8" font-family="Times New Roman,serif" font-size="14.00"> BLR&#45;GOA&#45;432 </text>
      </g>
    </g>

  </svg>

Upvotes: 1

softwarenewbie7331
softwarenewbie7331

Reputation: 967

The d3 element you append last is shown on top. the solution is to create another layer between graph and elements to contain your items, layer1 and layer2, append them to your parent node, then append all your ellipse to layer2. that way all your ellipse will be on top.

var layer1 = graph.append('g');
var layer2 = graph.append('g'); //elements within always above layer 1

var ellipse = layer2.append('ellipse')
    .attr...

var path = layer1.append('path')
    .attr...

Upvotes: 2

Related Questions