【问题标题】:Loop through data and load data from csv file循环遍历数据并从 csv 文件加载数据
【发布时间】:2015-08-30 08:18:17
【问题描述】:

我在循环这两组数据时遇到了困难。使用 1 组数据它可以工作,但现在我想添加更多 3 或 4 。此外,我想从我将上传的本地 csv 文件加载数据并更新数据,我将保存文件并覆盖它。 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>

【问题讨论】:

  • 您应该避免使用eval,而是尝试使用array of object,因为您当前的方法限制了您的可能性。
  • 如何将其从 eval 更改为对象数组?
  • 例如:var data = { boxes: [{ "bar1": "80%", "bar2": "60%", "bar3": "40%", "bar4": "50%", "total": "60%", },{ "bar1": "80%", "bar2": "60%", "bar3": "40%", "bar4": "50%", "total": "60%", }]} 这样您就可以拥有无​​限数量的盒子,只是不再有唯一的名称。
  • @bash.d 不需要那个 [] 数组。基于文本的索引访问也是可能的。
  • @JosephZammit - 我已经更新了我的答案,向您展示了一种避免 eval 的可能方法。 (记住:eval() == evil)

标签: javascript jquery css csv


【解决方案1】:

您必须注意文档就绪功能中的框索引。在您的代码中有一个修复“box1”,但 .data 的索引将上升到 7。因此,将索引除以 4,然后您可以计算框索引。您还必须遍历您的乐谱文本元素。

$(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;
   });
});

我也更新了您的示例。 http://jsfiddle.net/kmc3ohab/11/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-24
    • 1970-01-01
    • 1970-01-01
    • 2014-04-10
    • 1970-01-01
    • 1970-01-01
    • 2017-10-02
    相关资源
    最近更新 更多