2012-05-11 22 views
3

我正在嘗試做一些事情,雖然會很簡單。將數值1加到數字上。jQuery將一個數字添加到文本

然而,數字是純文本,事情變得有點混亂。正如你可能會猜到的,我對此很新。

我的目標是給現有分數增加1分,得分有一個小數位,例如1.3。 所以添加點後所需的結果是2.3。然而,我寫的當前腳本返回給第二個小數位添加了一個點,我不明白爲什麼。

感謝您的幫助。

var getPoints = parseInt($('.awesome-points').text(), 10).toFixed(1); 
alert(getPoints); 
var addPoint = 1; 
var newScore = getPoints + addPoint; 
$('.awesome-points').text(newScore); 

馬克

回答

9

.toFixed()返回一個字符串(見MDN documentation),這就是爲什麼getPoints + addPoint執行字符串連接,而不是加法。

調用該方法後,你進行的相加:

// unary + converts any numerical string to a number (no matter whether float 
// or int) 
var getPoints = +$('.awesome-points').text(); 
var newScore = getPoints + 1; 
$('.awesome-points').text(newScore.toFixed(1)); 

或者更簡潔:

$('.awesome-points').text(function(i, val) { 
    return (+val + 1).toFixed(1); 
}); 

這是如何工作的:

而不是一個值傳遞給.text()的,you can pass a function 。該功能將針對每個選定元素執行。傳遞給函數的第一個參數是所選元素集中元素的索引,第二個參數是當前文本內容。返回值將被設置爲新的文本內容。
這是讀取和寫入文本內容的好方法,無需調用.text()兩次。

(+val + 1).toFixed(1)評估如下:首先val通過一元加號(+val)轉換爲數字,然後加1(+ 1)。對該操作的結果調用.toFixed(1)。如果文本無法成功轉換爲數字,則返回NaN。我認爲這不會在你的情況發生,但是這可以很容易地處理與表達

return ((+val || 0) + 1).toFixed(1); 

這意味着,如果+val計算爲false(包括NaN),我們使用0代替。這是JavaScript中的常見模式,另請參閱What does "options = options || {}" mean in Javascript?

+0

呃而後,該toFixed功能將數值轉換爲字符串所以,這個問題不是很清楚,所以在你回答大聲笑之後,我只需要重讀另外3次。我仍然不知道OP需要什麼,但看到他可能想要的東西與正在返回的字符串不同,我會+你的答案。:P –

+0

我只是不認爲任何人都想用* score *來執行字符串連接;)但是我同意,這個問題沒有很好的闡述。 –

+0

Eeeeh好邏輯:)即使你永遠不知道人們現在做什麼樣的遊戲。 :P –

0

我想你想要的是像這樣

var getPoints = $('.awesome-points').text(); 
//alert(getPoints); 
var addPoint = 1; 
var newScore = parseFloat(getPoints) + addPoint; 
$('.awesome-points').text(newScore.toFixed(1)); 

似乎是你的答案,toFixed()在你的進程