我创建了一个图表,其中条形图值通过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;
你可以在这里看到代码
这是codepen
答案 0 :(得分:0)
那里有几个错误
to
和from
每个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,
});
});
答案 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>