Joseph Zammit
Joseph Zammit

Reputation: 373

Loop through data and load data from csv file

I'm having difficulty looping through this 2 sets of data. With 1 set of data it works but now I want to add more 3 or 4 . Also I want to load the data from a local csv file that I will upload and to update the data I will save the file and overwrite it. http://jsfiddle.net/kmc3ohab/7/

var data = {
    "box1": {
        "bar1": "80%",
        "bar2": "60%",
        "bar3": "40%",
        "bar4": "50%",
        "total": "60%",
    },
     "box2": {
        "bar1": "80%",
        "bar2": "60%",
        "bar3": "40%",
        "bar4": "50%",
        "total": "80%",
    },
};

$(document).ready(function() {
    $(".score-text").html(data.box1.total);
    $(".data").each(function( index, value ) {
        width = eval('data.box1.bar' + (index+1));
        value.innerText = width;
        value.style.width = width;
    });
});

    
body {
	background: #efefef;
	width: 100%;
	margin: 0px;
	text-align: center;
}

h2 {
	font-family: 'Noto Sans', serif;
	color: #b71f38;
	font-weight: 300;
	margin: 0px;
}

h3 {
	font-family: 'Noto Sans', serif;
	color: #444444;
	font-weight: 200;
	margin: 0px;
}

#colLeft {
	width: 50%;
	float: left;
}

#colRight {
	width: 50%;
	float: right;
}

#row {
	background: #e2e2e2;
	width: auto;
	height: 230px;
	margin: 15px;
	border-radius: 5px;
}

#insideColLeft {
	width: 30%;
	float: left;
}

#insideColRight {
	width: 69%;
	float: right;
	padding-top: 8px;
	padding-right: 5px;
}

.circle {
	margin-left: auto;
	margin-right: auto;
	border-radius: 50%;
	width: 150px;
	position: relative;
	background: #b71f38;
}

.circle:before {
	content: "";
	display: block;
	padding-top: 100%;
}

.circle-inner {
	position: absolute;
	top: 0;
	left: 0;
	bottom: 0;
	right: 0;
	text-align: center;
}

.score-text {
	margin: auto;
	position: absolute;
	top: 0;
	left: 0;
	bottom: 0;
	right: 0;
	height: 1em;
	line-height: 1em;
	font-size: 30px;
	font-family: 'Fjalla One', sans-serif;
	color: #ffffff;
}

.date {
	font-family: 'Fjalla One', sans-serif;
	text-align: center;
	color: #333333;
}

ul.graph {
	margin: 0;
	padding: 0;
	list-style-type: none;
}
	
ul.graph li {
	margin: 10px;
	height: 25px;
	background: #ccc;
	color: #fff;
}
	
ul.graph li.data {
	background: #f4ebb8;
}
	
<div id="row">
      <h2>Title</h2>
      <h3>Subtitle</h3>
      <div id="insideColLeft">
        <div class="circle">
          <div class="circle-inner">
            <div class="score-text">
            </div>
          </div>
        </div>
        
      </div>
      <div id="insideColRight">
        <ul class="graph">
          <li class="data">bar 1</li>
          <li class="data">bar 2</li>
          <li class="data">bar 3</li>
          <li class="data">bar 4</li>
        </ul>
      </div>
    </div>
<div id="row">
      <h2>Title</h2>
      <h3>Subtitle</h3>
      <div id="insideColLeft">
        <div class="circle">
          <div class="circle-inner">
            <div class="score-text">
            </div>
          </div>
        </div>
        
      </div>
      <div id="insideColRight">
        <ul class="graph">
          <li class="data">bar 1</li>
          <li class="data">bar 2</li>
          <li class="data">bar 3</li>
          <li class="data">bar 4</li>
        </ul>
      </div>
    </div>

Upvotes: 0

Views: 548

Answers (1)

netblognet
netblognet

Reputation: 2026

You have to take care of the box-index in your document-ready-function. In your code there is a fix "box1" but the index of .data will go up to 7. So divide the index by 4 and then you can calculate the box-indexes. You also have to loop over your score-text-elements.

$(document).ready(function() {
   $(".score-text").each(function( index, value ) { 
       value.innerText = data['box'+(index+1)].total;
   });

   $(".data").each(function( index, value ) {  
       var boxIndex = Math.floor(index/4);
       width = data['box'+(boxIndex+1)]['bar'+(index+1-boxIndex*4)];
       value.innerText = width;
       value.style.width = width;
   });
});

I've updates your example, too. http://jsfiddle.net/kmc3ohab/11/

Upvotes: 1

Related Questions