javascript - 通过多个元素重复脚本

标签 javascript jquery html css

我创建了一个脚本,将 HTML 值从一个元素转换为百分比,然后百分比值确定另一个元素(在本例中为条)的宽度。

这对于单个元素来说一切都很好(正如您将看到的),但是,当我有一个元素在页面中回显时,它就不起作用了。我可以在这里指出正确的方向吗?

当前的 JS fiddle :http://jsfiddle.net/ctalke/27no66rm/

//==================================== Bar Percentage Start ================================//
var a = document.getElementsByClassName('term')[0].innerHTML;
var b = document.getElementsByClassName('age')[0].innerHTML;
var c = 100;
var d = b / a;
var e = d * c;

document.getElementsByClassName('barv')[0].style.width = Math.round(e) + '%';
document.getElementsByClassName('barv')[0].innerHTML = Math.round(e) + '%';
//==================================== Bar Percentage End =================================//

//===================================== Bar Colour Start ==================================//
var a1 = document.getElementById("barv");

if (e < 50) {
  a1.className += " green";
} else if (e < 99) {
  a1.className += " yellow";
} else {
  a1.className += " red";
}
//===================================== Bar Colour End ==================================//
.bar {
  text-align: center;
  height: 20px;
  border: 1px solid black;
  color: white;
}

.hide {
  display: none;
}

.red {
  background-color: red;
}

.yellow {
  background-color: yellow;
  color: black!important;
}

.green {
  background-color: green;
}
<!-- Term -->
<div class="term hide">36</div>
<!-- Age -->
<div class="age hide">35</div>
<!-- Progress Bar -->
<div class="bar barv red"></div>

<br>

<!-- Term 1 -->
<div class="term hide">36</div>
<!-- Age 1 -->
<div class="age hide">2</div>
<!-- Progress Bar 1 -->
<div class="bar barv yellow"></div>

<br>

<!-- Term 2 -->
<div class="term hide">36</div>
<!-- Age 2 -->
<div class="age hide">15</div>
<!-- Progress Bar 2 -->
<div class="bar barv green"></div>

最佳答案

您只需要使用 for 循环遍历代码段即可。

var bars = document.getElementsByClassName('bar');

for (i = 0; i < bars.length; i++) {
    // Your code here
}

并将[0]替换为[i]

//==================================== Bar Percentage Start ================================//
var bars = document.getElementsByClassName('bar');

for (i = 0; i < bars.length; i++) {
  var a = document.getElementsByClassName('term')[i].innerHTML;
  var b = document.getElementsByClassName('age')[i].innerHTML;
  var c = 100;
  var d = b / a;
  var e = d * c;

  document.getElementsByClassName('barv')[i].style.width = Math.round(e) + '%';
  document.getElementsByClassName('barv')[i].innerHTML = Math.round(e) + '%';
  //==================================== Bar Percentage End =================================//

  //===================================== Bar Colour Start ==================================//
  var a1 = document.getElementsByClassName("barv")[i];

  if (e < 50) {
    a1.className += " green";
  } else if (e < 99) {
    a1.className += " yellow";
  } else {
    a1.className += " red";
  }
}
//===================================== Bar Colour End ==================================//
.bar {
  text-align: center;
  height: 20px;
  border: 1px solid black;
  color: white;
}

.hide {
  display: none;
}

.red {
  background-color: red;
}

.yellow {
  background-color: yellow;
  color: black!important;
}

.green {
  background-color: green;
}
<!-- Term -->
<div class="term hide">36</div>
<!-- Age -->
<div class="age hide">35</div>
<!-- Progress Bar -->
<div class="bar barv red"></div>

<br>

<!-- Term 1 -->
<div class="term hide">36</div>
<!-- Age 1 -->
<div class="age hide">2</div>
<!-- Progress Bar 1 -->
<div class="bar barv yellow"></div>

<br>

<!-- Term 2 -->
<div class="term hide">36</div>
<!-- Age 2 -->
<div class="age hide">15</div>
<!-- Progress Bar 2 -->
<div class="bar barv green"></div>

您可以通过将相同选择器缓存在变量中来减少重复。

//==================================== Bar Percentage Start ================================//
var bars = document.querySelectorAll('.bar');

for (i = 0; i < bars.length; i++) {
  var bar = bars[i];
  var term = document.querySelectorAll('.term')[i];
  var age = document.querySelectorAll('.age')[i];
  var a = term.innerHTML;
  var b = age.innerHTML;
  var c = 100;
  var d = b / a;
  var e = d * c;

  bar.style.width = Math.round(e) + '%';
  bar.innerHTML = Math.round(e) + '%';
  //==================================== Bar Percentage End =================================//

  //===================================== Bar Colour Start ==================================//
  if (e < 50) {
    bar.classList.add("green");
  } else if (e < 99) {
    bar.classList.add("yellow");
  } else {
  bar.classList.add("red");
  }
}
//===================================== Bar Colour End ==================================//

关于javascript - 通过多个元素重复脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46430346/

相关文章:

javascript - 如何 Hook 库函数(Golden Layout)并调用其他方法

javascript - 如何用js操作cookie

javascript - 为什么我在 React 应用程序的 HTML 输出中看到传递的 Prop ?

javascript 安全问题 (jQuery DataTables)

javascript - 在 Javascript 中将 json 数组传递给 ajax 调用

Javascript 函数适用于除文本区域、文本框之外的所有页面

javascript - 在完成之前的相同 Ajax 请求之前,不要发送 Ajax 请求

html - 如何减少我的框中的空白(右宽度)

html - CSS:内联样式是否更慢?

php - Moodle主题定制