3

私は何かをしようとしていますが、本当に簡単です。数値に 1 の値を追加します。

ただし、数字はプレーンテキストであり、少し混乱しています。ご想像のとおり、私はこれにかなり慣れていません。

私の目標は、既存のスコアに 1 ポイントを追加することです。スコアの小数点以下は 1 桁です (例: 1.3)。したがって、ポイントを追加した後の望ましい結果は 2.3 です。しかし、私が書いた現在のスクリプトでは、小数点以下 2 桁目にポイントが追加されますが、その理由がわかりません。

助けてくれてありがとう。

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

マーク

4

2 に答える 2

9

.toFixed()は文字列を返します ( MDN のドキュメント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()関数を渡すことができます。この関数は、選択した要素ごとに実行されます。関数に渡される最初の引数は、選択された要素のセット内の要素のインデックスであり、2 番目の引数は現在のテキスト コンテンツです。戻り値は新しいテキスト コンテンツとして設定されます。これは、 2 回
呼び出すことなく、テキスト コンテンツを読み書きするのに適した方法です。.text()

(+val + 1).toFixed(1)は次のように評価されます。最初valに、単項プラス ( +val) によって数値に変換され、次に 1 増加されます ( + 1)。.toFixed(1)その操作の結果に対して呼び出されます。

+valNaNテキストを数値に正常に変換できない場合に返されます。これはあなたの場合には起こらないと思いますが、これは式で簡単に処理できます

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

つまり、が( を含む) と+val評価される場合、代わりに使用します。これは JavaScript の一般的なパターンです。What does "options = options || {}" mean in Javascript?も参照してください。.falseNaN0

于 2012-05-12T00:00:27.570 に答える
0

あなたが欲しいのはこのようなものだと思います

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

それがあなたの答えだったようですが、 toFixed() は数値を文字列に変換するので、プロセスの後半で toFixed 関数を作成することで

于 2012-05-12T01:33:31.637 に答える