2016-12-31 8 views
0

私は平均的な評価をしようとしています。 jQueryの最初の部分はプログレスバーのアニメーション用で、2番目の部分はレビューの平均を取得するためのものです。しかし、私のconsole.logは私にNaNを与え、私はなぜそれを知りません。平均jquery 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>

+1

クラスには「.aria-valuenow」という要素はありません。単一の 'each()'ループで必要なものを達成することもできます –

+0

'.each()'ループは、ループしている要素を使用していません。 – Barmar

+0

このコード全体でループが多すぎます – charlietfl

答えて

0

すべてのプログレスバーをループ、それプログレスバーから何も合算していない - コールバック関数は、現在の要素を取得するためにthisを使用することはありません。代わりに、class="aria-valuenow"の要素のテキストを取得しています。これはクラスではなく、プログレスバーDIVの属性です。

私が何をしたいことはあると思う:

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

問題は行にある:

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

あなたのその文が持つ要素からテキストを取得を意味するので、動作しませんaria-valuenowクラスあなたは実際にaria-valuenowです。だから、その行は次のようになります。

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

行は次のように展開されたので、あなたが( NotANumber を表す値)NaNを得ている理由は次のとおりです。

avg += parseInt("") 

parseInt("")結果NaNとそれ以上の合計(NaN + 1 = NaN