2016-03-18 288 views
0

我有下面的代碼來計算各元素的比例(如投票表決系統):計算百分比

$(document).ready(function() { 
 
    $("#percentage").click(function() { 
 
     var number, sumNumbers = 0, newPercent; 
 
    
 
     $(".item").each(function() { 
 
      number = $(this).children(".itemNum").text(); 
 
      number = +number; 
 

 
      sumNumbers += number; 
 

 
      if(sumNumbers != 0) { 
 
       newPercent = (number/sumNumbers) * 100; 
 
      } else { 
 
       newPercent = 0; 
 
      } 
 

 
      $(this).children(".percentage").text(newPercent+"%"); 
 
     }); 
 
    }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<div class="item"> 
 
    <span class="itemNum">0</span> <span class="percentage"></span> 
 
</div> 
 

 
<div class="item"> 
 
    <span class="itemNum">2</span> <span class="percentage"></span> 
 
</div> 
 

 
<div class="item"> 
 
    <span class="itemNum">1</span> <span class="percentage"></span> 
 
</div> 
 

 
<button id="percentage">Calculate Percentage!</button>

但是,結果是:

0 0% 
2 100% 
1 33.33333333333333% 

那麼,如何計算返回以下結果呢?

0 0% 
2 66.66666666666667% 
1 33.33333333333333% 

我需要這些結果在我的輪詢系統上做一個進度條,所以,如何做到這一點?

+3

你必須先得到款項,然後才能計算出百分比。 – Musa

+0

所以,我必須在第一個'.each'之前做其他'$(「。item」)。我做到了這一點,它的工作原理,但我不知道是否正確使用類似於:$(「。item」)。each(function(){doSomething()}); $(「。item」)。each(function(){doSomethingAgain()});'@Musa – Igor

+1

@Igor我編輯了我的答案以回答* .each()*註釋。 –

回答

3

您需要通過解析文本爲整數parseInt()函數。

而你需要首先總結數字,然後你可以計算出百分比。

對於一個循環問題:
您無法在一個循環中統計百分比。解釋here

$(document).ready(function() { 
 
    $("#percentage").click(function() { 
 
     var number, sumNumbers = 0, newPercent; 
 
     $(".item").each(function(){ 
 
       number = $(this).children(".itemNum").text(); 
 
       sumNumbers += parseInt(number); 
 
       
 
      }); 
 
     $(".item").each(function() { 
 
      number = parseInt($(this).children(".itemNum").text()); 
 

 
      if(sumNumbers != 0) { 
 
       newPercent = (number/sumNumbers) * 100; 
 
      } else { 
 
       newPercent = 0; 
 
      } 
 

 
      $(this).children(".percentage").text(newPercent+"%"); 
 
     }); 
 
    }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<div class="item"> 
 
    <span class="itemNum">0</span> <span class="percentage"></span> 
 
</div> 
 

 
<div class="item"> 
 
    <span class="itemNum">2</span> <span class="percentage"></span> 
 
</div> 
 

 
<div class="item"> 
 
    <span class="itemNum">1</span> <span class="percentage"></span> 
 
</div> 
 

 
<button id="percentage">Calculate Percentage!</button>

+1

爲什麼要投票?我的代碼片段正常工作,因爲您的問題想要。 –

+0

我已經這樣做了,所以我的問題是關於再次使用'.each' ...但是你的回答是正確的,並且也可以工作。謝謝。 – Igor

+1

@Igor你的問題是關於不工作的百分比計數不是關於* .each *;)。沒問題。 –