【问题标题】:jquery NaN on averagejquery NaN 平均
【发布时间】:2017-05-15 16:03:46
【问题描述】:

我试图获得平均评价。 jQuery 的第一部分用于进度条动画,第二部分用于获取评论平均值。但是我的console.log 给了我NaN,我不知道为什么。

var avg = 0;
var amount = 0;

$(".review").each(function() {
  var progres = $(".progress-bar");
  progres.each(function() {
    avg = avg + parseInt($(".aria-valuenow").text());
    amount = amount + 1;
  });
});

avg = avg / amount;
console.log(avg);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="review">
  <span class="progressText"><B>review 1</B></span>
  <div class="progress">
    <div class="progress-bar w-75" role="progressbar" aria-valuenow="25" aria-valuemin="0" aria-valuemax="100"></div>
  </div>
  <span class="progressText"><B>review 2</B></span>
  <div class="progress">
    <div class="progress-bar w-75" role="progressbar" aria-valuenow="35" aria-valuemin="0" aria-valuemax="100"></div>
  </div>
  <p class="avg"></p>
</div>

【问题讨论】:

  • 您没有属于.aria-valuenow 类的元素。您还可以在单​​个 each() 循环中实现您的要求
  • 你的 .each() 循环没有使用它循环的元素。
  • 这段代码的循环太多了
  • 这真的与 jQuery 无关。如果你提取出这个表达式 $(".aria-valuenow").text() 并将它分配给一个变量并 console.logged 它,你会自己发现问题。

标签: jquery nan


【解决方案1】:

问题出在一行:

 avg=avg+parseInt($(".aria-valuenow").text());

不起作用,因为您的该语句意味着 从具有 aria-valuenow 类的元素中获取文本,而您实际上 aria-valuenow 是一个属性。因此该行应如下所示:

 avg += Number($(".progress-bar").prop("aria-valuenow"));

你得到NaN(代表NotANumber的值)的原因是因为该行被扩展为以下内容:

avg += parseInt("")

parseInt("") 产生NaN 以及任何进一步的总和 (NaN + 1 = NaN)

【讨论】:

    【解决方案2】:

    您正在遍历所有进度条,但没有从该进度条中添加任何内容——回调函数从不使用this 来获取当前元素。相反,它使用class="aria-valuenow" 获取元素的文本;那不是类,是进度条DIV的一个属性。

    我想你想要的是:

    avg += parseInt($(this).attr("aria-valuenow"));
    

    【讨论】:

      猜你喜欢
      • 2021-01-10
      • 2013-04-01
      • 1970-01-01
      • 2014-05-02
      • 2019-03-21
      • 2016-04-09
      • 1970-01-01
      • 2021-07-17
      • 2011-10-07
      相关资源
      最近更新 更多