【发布时间】:2018-01-18 00:33:22
【问题描述】:
我正在尝试遍历每个 .student-item div,从每个 .student-item 中的各种数字计算一堆不同的值(数字不需要更改),并输出新文本和/或添加/使用这些值修改 CSS 样式。
问题
- 虽然
.each似乎在工作——我在循环的每个主要部分之后将消息记录到控制台,我看到每个有 10 个,这是正确的项目数——见 #2下面。 - 数学不工作(因此
.else循环?)。我还记录了其中一个变量,scoreChangeNum,其中包含一些 简单 数学,只有在满足一个.hasClass条件时才会显示(这应该适用于.student-items中的 7 个这个案例)。您还将看到+-8 ytd文本。此文本在scoreChangeNum变量中计算并附加到跨度内。计算错误(每个数字应该在 ~10 到 ~300 之间)并且是为每个.student-item编写的(它们应该都是不同的)。 - 我添加到某些元素的 css 并没有将它们移动到应有的位置。我猜是因为数学似乎不对..?位置(和某些元素的宽度)应由不同元素内的数字确定。
这有意义吗?对不起,跑步。希望得到一些关于这里出了什么问题的提示。让我知道是否有任何不清楚的地方。谢谢!
编辑(在此处添加代码。):
HTML(但.student-item 共有 10 个)
<div class="students-list">
<div class="student-item">
<a href="#" class="name">Jim Wise</a>
<div class="score-bar">
<div class="scores">
<div class="current-score point">180</div>
<div class="orig-score-arrow"></div>
<div class="orig-score">80</div>
<div class="score-change">+<span class="score-change-amount">nnn</span> ytd</div>
</div>
<ul id="markings">
<li> </li>
<li> </li>
<li> </li>
<li> </li>
<li> </li>
<li> </li>
<li> </li>
<li> </li>
<li> </li>
<li> </li>
<li> </li>
<li> </li>
<li> </li>
</ul>
</div>
<div class="print-icon"></div>
</div>
<div class="student-item">
<a href="#" class="name">Frank Owens</a>
<div class="score-bar">
<div class="scores">
<div class="current-score point">280</div>
<div class="orig-score-arrow"></div>
<div class="orig-score">100</div>
<div class="score-change">+<span class="score-change-amount">nnn</span> ytd</div>
</div>
<ul id="markings">
<li> </li>
<li> </li>
<li> </li>
<li> </li>
<li> </li>
<li> </li>
<li> </li>
<li> </li>
<li> </li>
<li> </li>
<li> </li>
<li> </li>
<li> </li>
</ul>
</div>
<div class="print-icon"></div>
</div>
</div>
jQuery
$(document).ready(function() {
var studentItem = '.student-item';
$(studentItem).each(function(){
console.log('"each" function - CHECK');
var currentScoreElement = '.current-score',
origScoreArrow = '.orig-score-arrow',
origScoreElement = '.orig-score',
origScoreNum = parseInt($(origScoreElement).text()),
origScorePos = parseInt(origScoreNum * .48),
scoreChangeSpan = '.score-change-amount';
console.log('initial variables - CHECK');
if ( $(currentScoreElement).hasClass('point') ) {
var currentScoreNum = parseInt($(currentScoreElement).text()),
currentScorePointPos = parseInt(currentScoreNum * .48),
origScoreArrowWidth = parseInt((currentScorePointPos - origScorePos) * .9),
scoreChangeNum = parseInt(currentScoreNum - origScoreNum);
console.log(scoreChangeNum);
$(currentScoreElement).css({ 'left': currentScorePointPos + 'px' });
$(origScoreElement).css({ 'left': origScorePos + 'px' });
$(origScoreArrow).css({ 'left': origScorePos + 'px', 'width': origScoreArrowWidth + 'px' });
$(scoreChangeSpan).text(scoreChangeNum);
$(scoreChangeSpan).css({ 'left': parseInt(currentScorePointPos - 12) + 'px' });
} else if ( $(currentScoreElement).hasClass('range') ) {
var currentRangeStart = parseInt($(currentScoreElement).find('.start').text()),
currentRangeEnd = parseInt($(currentScoreElement).find('.end').text()),
currentRangeWidth = parseInt(currentRangeEnd - currentRangeStart),
currentRangeAvg = parseInt((currentRangeStart + currentRangeEnd) / 2);
origScoreArrowWidth = parseInt(currentRangeAvg - origScorePos),
scoreChangeNum = parseInt(currentScoreNum - origScoreNum);
$(currentScoreElement).css({ 'left': currentRangeStart + 'px', 'width': currentRangeWidth + 'px' });
$(origScoreElement).css({ 'left': origScorePos + 'px' });
$(origScoreArrow).css({ 'left': origScorePos + 'px', 'width': origScoreArrowWidth + 'px' });
$(scoreChangeSpan).text(scoreChangeNum);
$(scoreChangeSpan).css({ 'left': parseInt(currentRangeAvg - 12) + 'px' });
}
});
});
【问题讨论】:
-
您应该可以在此处添加/嵌入您的代码作为工作版本,从而避免其他人不得不离开页面 :-) 不确定,但您在 parseInt
parseInt(currentScoreNum * .48)中有此计算,您可以试试吗就像parseInt(currentScoreNum) * .48 -
项目只是包含很多代码,所以我选择简洁而不是离开页面。我尝试了
parseInt(currentScoreNum) * .48而不是parseInt(currentScoreNum * .48),但它似乎并没有改变数学。 -
如果你注销所有的值,例如
origScoreNum值,我得到值 8.01004202408032e+27?? -
是的,我也为
origScoreNum得到了这个。您可以在 html 中看到,数学不应该接近那么高——我计算的数字都不超过 ~600,并且任何乘法都是分数(例如 0.48 等)。这就是问题的全部,真的。 -
当我输出 $(origScoreElement).text() 我得到 8010042024080320290510420550 si 正确吗?