Как добавить целочисленное значение с помощью javascript (jquery) к значению, возвращающему строку?


92

У меня есть простой блок HTML, например:

<span id="replies">8</span>

Используя jquery, я пытаюсь добавить 1 к значению (8).

var currentValue = $("#replies").text();
var newValue = currentValue + 1;
$("replies").text(newValue);

Что происходит, это выглядит так:

81 год

тогда

811

а не 9, что было бы правильным ответом. Что я делаю не так?

Ответы:


187

parseInt () заставит его иметь целочисленный тип или будет NaN (не числом), если он не может выполнить преобразование.

var currentValue = parseInt($("#replies").text(),10);

Второй параметр (основание) гарантирует, что он анализируется как десятичное число.


10
Будьте осторожны с parseInt (), он распознает «010» как 9 (значения, начинающиеся с нуля, анализируются как восьмеричные).
MightyE

3
Bleh, «010» разбирается как 8 (а не 8)
MightyE

7
@ Джейкоб Релкин: Поскольку это было полезно, я просто поставил ему еще +1. Если вы знаете ответ получше, жаль, что вы не поделились им.
Аневс считает SE злом

1
Это происходит, если не обнаруживается начальный ноль, тогда он становится восьмеричным. Простой глюк при принятии пользовательского ввода.
Диодей - Джеймс Макфарлейн

1
Он работает нормально, если вы укажете основание системы счисления с помощью второго параметра: parseInt("010", 10)возвращает десять.
jahroy

29

Parse int - это инструмент, который вы должны здесь использовать, но, как и любой другой инструмент, его следует использовать правильно. При использовании parseInt вы всегда должны использовать параметр radix, чтобы убедиться, что используется правильная база

var currentValue = parseInt($("#replies").text(),10);

27

Целое число преобразуется в строку, а не наоборот. Вы хотите:

var newValue = parseInt(currentValue) + 1

12

parseInt не работал у меня в IE. Поэтому я просто использовал + для переменной, которую вы хотите использовать как целое число.

var currentValue = $("#replies").text();
var newValue = +currentValue + 1;
$("replies").text(newValue);

4

Что касается восьмеричного неправильного толкования .js - я просто использовал это ...

parseInt(parseFloat(nv))

и после тестирования с ведущими нулями возвращался каждый раз с правильным представлением.

надеюсь это поможет.


2

Ваш код должен выглядеть так:

<span id="replies">8</span>

var currentValue = $("#replies").text();
var newValue = parseInt(parseFloat(currentValue)) + 1;
$("replies").text(newValue);

Hacks N Tricks


1

чтобы увеличить на единицу, вы можете сделать что-то вроде

  var newValue = currentValue ++;

8
Неужто ++ currentValue?
Marcin

1
var month = new Date().getMonth();
var newmon = month + 1;
$('#month').html((newmon < 10 ? '0' : '') + newmon );

Я просто исправил вашу проблему с месяцем, массив getMonth начинается с 0 до 11.


1

Просто добавьте знак плюса перед текстовым значением

var newValue = +currentValue + 1;

1

Вы можете умножить переменную на 1, чтобы заставить JavaScript преобразовать переменную в число за вас, а затем добавить его к другому значению. Это работает, потому что умножение не перегружено, как сложение. Некоторые могут сказать, что это менее понятно, чем parseInt, но это способ сделать это, и о нем еще не упоминалось.


-1

Вы можете использовать метод parseInt () для преобразования строки в целое число в javascript

Вы просто меняете код вот так

$("replies").text(parseInt($("replies").text(),10) + 1);

Чем это отличается от опубликованного выше ответа (опубликованного около 10 лет назад)?
Code Maniac
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.