在每个类上运行JS函数

时间:2018-02-16 12:03:56

标签: javascript html function

我创建了一个图表,其中条形图值通过HTML添加并根据需要在JS中进行修改。 JS输出的值来自第一个栏,但它没有从其他栏中获取值。

有谁知道如何使该功能输出每个条形的值?



$('.vertical .progress-fill span').each(function(){
  var to = $(".vertical .progress-fill span.to").html();
  var from = $(".vertical .progress-fill span.from").html();
  
  var percentFrom = from + "%";
  
  var pBottom = 0 + ( from.slice(0, from.length - 1) );
  var pTop = 100 - (to) + "%" ;
  
  var bottom = (pBottom) + "%";
  var top = (to - from) + "%";
  
  $(this).parent().css({
    'height' : top,
    'top' : pTop,
    'bottom' : percentFrom,
  });
});


/*$('.vertical .progress-fill span').each(function(){
  var percent = $(this).html();
  var pTop = 100 - ( percent.slice(0, percent.length - 1) ) + "%";
  $(this).parent().css({
    'height' : percent,
    'top' : pTop
  });
});*/

*, *:before, *:after {
  -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box;
 }

body {
  background: #999;
}

h2 {
  margin: 0 0 20px 0;
  padding: 0 0 5px 0;
  border-bottom: 1px solid #999;
  font-family: sans-serif;
  font-weight: normal;
  color: #333;
}

.container {
  width: 500px;
  margin: 20px;
  background: #fff;
  padding: 20px;
  overflow: hidden;
  float: left;
}

/* Vertical */

.vertical .progress-bar {
  float: left;
  height: 300px;
  width: 40px;
  margin-right: 25px;
}

.vertical .progress-track {
  position: relative;
  width: 40px;
  height: 100%;
  background: #ebebeb;
}

.vertical .progress-fill {
  position: relative;
  background: #825;
  height: 50%;
  width: 40px;
  color: #fff;
  text-align: center;
  font-family: "Lato","Verdana",sans-serif;
  font-size: 12px;
  line-height: 20px;
}

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="container vertical flat">

  <div class="progress-bar">
    <div class="progress-track">
      <div class="progress-fill">
        <span class="to">90</span>
        <span class="from">20</span>
      </div>
    </div>
  </div>

  <div class="progress-bar">
    <div class="progress-track">
      <div class="progress-fill">
        <span class="to">75</span>
        <span class="from">10</span>
      </div>
    </div>
  </div>

  <div class="progress-bar">
    <div class="progress-track">
      <div class="progress-fill">
        <span class="to">60</span>
        <span class="from">10</span>
      </div>
    </div>
  </div>

  <div class="progress-bar">
    <div class="progress-track">
      <div class="progress-fill">
        <span class="to">100</span>
        <span class="from">0</span>
      </div>
    </div>
  </div>

  <div class="progress-bar">
    <div class="progress-track">
      <div class="progress-fill">
        <span class="to">50</span>
        <span class="from">40</span>
      </div>
    </div>
  </div>

  <div class="progress-bar">
    <div class="progress-track">
      <div class="progress-fill">
        <span class="to">70</span>
        <span class="from">30</span>
      </div>
    </div>
  </div>
</div>
&#13;
&#13;
&#13;

你可以在这里看到代码

这是codepen

3 个答案:

答案 0 :(得分:0)

那里有几个错误

  • 您没有tofrom每个progress-fill

  var to = $(this).find(".to").html();
  var from = $(this).find(".from").html();
  • 将选择器$('.vertical .progress-fill span')更改为$('.vertical .progress-fill')

$('.vertical .progress-fill').each(function(){

答案 1 :(得分:0)

你正在循环错误的元素。

循环.progress-fill

$('.vertical .progress-fill').each(function(){
  var to = $(this).find(".to").html();
  var from = $(this).find(".from").html();

  var percentFrom = from + "%";

  var pBottom = 0 + ( from.slice(0, from.length - 1) );
  var pTop = 100 - (to) + "%" ;

  var bottom = (pBottom) + "%";
  var top = (to - from) + "%";

  $(this).parent().css({
    'height' : top,
    'top' : pTop,
    'bottom' : percentFrom,
  });
});

https://codepen.io/anon/pen/rJYqNg

答案 2 :(得分:0)

问题是你正在遍历所有跨度:

<span class="to">90</span>
<span class="from">20</span>
<span class="to">75</span>
<span class="from">10</span>
<span class="to">60</span>
<span class="from">10</span>
<span class="to">100</span>
<span class="to">50</span>
<span class="from">40</span>
<span class="from">0</span>
<span class="to">70</span>
<span class="from">30</span>

您必须迭代.progress-fill

$('.vertical .progress-fill').each(function(){
  var $this = $(this);
  var to = $this.find("span.to").html();
  var from = $this.find("span.from").html();

  var percentFrom = from + "%";

  var pBottom = 0 + ( from.slice(0, from.length - 1) );
  var pTop = 100 - (to) + "%" ;

  var bottom = (pBottom) + "%";
  var top = (to - from) + "%";

  $(this).parent().css({
    'height' : top,
    'top' : pTop,
    'bottom' : percentFrom,
  });
});

$('.vertical .progress-fill').each(function(){
  var $this = $(this);
  var to = $this.find("span.to").html();
  var from = $this.find("span.from").html();
 
  var percentFrom = from + "%";
  
  var pBottom = 0 + ( from.slice(0, from.length - 1) );
  var pTop = 100 - (to) + "%" ;
  
  var bottom = (pBottom) + "%";
  var top = (to - from) + "%";
  
  $(this).parent().css({
    'height' : top,
    'top' : pTop,
    'bottom' : percentFrom,
  });
});
*, *:before, *:after {
  -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box;
 }

body {
  background: #999;
}

h2 {
  margin: 0 0 20px 0;
  padding: 0 0 5px 0;
  border-bottom: 1px solid #999;
  font-family: sans-serif;
  font-weight: normal;
  color: #333;
}

.container {
  width: 500px;
  margin: 20px;
  background: #fff;
  padding: 20px;
  overflow: hidden;
  float: left;
}

/* Vertical */

.vertical .progress-bar {
  float: left;
  height: 300px;
  width: 40px;
  margin-right: 25px;
}

.vertical .progress-track {
  position: relative;
  width: 40px;
  height: 100%;
  background: #ebebeb;
}

.vertical .progress-fill {
  position: relative;
  background: #825;
  height: 50%;
  width: 40px;
  color: #fff;
  text-align: center;
  font-family: "Lato","Verdana",sans-serif;
  font-size: 12px;
  line-height: 20px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="container vertical flat">

  <div class="progress-bar">
    <div class="progress-track">
      <div class="progress-fill">
        <span class="to">90</span>
        <span class="from">20</span>
      </div>
    </div>
  </div>

  <div class="progress-bar">
    <div class="progress-track">
      <div class="progress-fill">
        <span class="to">75</span>
        <span class="from">10</span>
      </div>
    </div>
  </div>

  <div class="progress-bar">
    <div class="progress-track">
      <div class="progress-fill">
        <span class="to">60</span>
        <span class="from">10</span>
      </div>
    </div>
  </div>

  <div class="progress-bar">
    <div class="progress-track">
      <div class="progress-fill">
        <span class="to">100</span>
        <span class="from">0</span>
      </div>
    </div>
  </div>

  <div class="progress-bar">
    <div class="progress-track">
      <div class="progress-fill">
        <span class="to">50</span>
        <span class="from">40</span>
      </div>
    </div>
  </div>

  <div class="progress-bar">
    <div class="progress-track">
      <div class="progress-fill">
        <span class="to">70</span>
        <span class="from">30</span>
      </div>
    </div>
  </div>
</div>