Jak dodać liczbę całkowitą za pomocą javascript (jquery) do wartości, która zwraca ciąg?

92

Mam prosty blok html taki jak:

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

Używając jquery, próbuję dodać 1 do wartości (8).

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

To, co się dzieje, wygląda tak:

81

następnie

811

nie 9, co byłoby poprawną odpowiedzią. Co ja robię źle?

rball
źródło

Odpowiedzi:

187

parseInt () wymusi, że będzie on typu integer lub będzie NaN (nie liczbą), jeśli nie może wykonać konwersji.

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

Drugi parametr (podstawa) zapewnia, że ​​jest on analizowany jako liczba dziesiętna.

Diodeus - James MacFarlane
źródło
10
Uważaj na parseInt (), rozpoznaje ona „010” jako 9 (wartości zaczynające się od zera są przetwarzane jako ósemkowe).
MightyE
3
Bleh, „010” analizuje jako 8 (nie 8)
MightyE,
7
@Jacob Relkin: Ponieważ było to przydatne, dałem mu kolejne +1. Jeśli znasz lepszą odpowiedź, szkoda, że ​​jej nie podzieliłeś.
ANeves uważa, że ​​SE jest zła
1
Robi, chyba że wykryje wiodące zero, wtedy staje się ósemkową. Prosta usterka podczas akceptowania danych wejściowych użytkownika.
Diodeus - James MacFarlane
1
Działa dobrze, o ile określasz podstawę za pomocą drugiego parametru: parseInt("010", 10)zwraca dziesięć.
jahroy
29

Parse int to narzędzie, którego powinieneś tutaj użyć, ale jak każde narzędzie powinno być używane poprawnie. Korzystając z parseInt, należy zawsze używać parametru radix, aby upewnić się, że używana jest poprawna podstawa

var currentValue = parseInt($("#replies").text(),10);
Jon P
źródło
27

Liczba całkowita jest konwertowana na ciąg znaków, a nie odwrotnie. Chcesz:

var newValue = parseInt(currentValue) + 1
Gdakanie
źródło
12

parseInt nie działa dla mnie w IE. Więc po prostu użyłem + na zmiennej, którą chcesz jako liczbę całkowitą.

var currentValue = $("#replies").text();
var newValue = +currentValue + 1;
$("replies").text(newValue);
Gareth Nel
źródło
4

Jeśli chodzi o ósemkową błędną interpretację .js - właśnie użyłem tego ...

parseInt(parseFloat(nv))

i po sprawdzeniu z zerami na początku, za każdym razem wracał z poprawną reprezentacją.

mam nadzieję że to pomoże.

Bill Ortell
źródło
2

Twój kod powinien wyglądać tak:

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

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

Hacks N Tricks

rajeev
źródło
1

aby zwiększyć o jeden, możesz zrobić coś takiego

  var newValue = currentValue ++;
Alex
źródło
8
Z pewnością ++ currentValue?
Marcin
1
var month = new Date().getMonth();
var newmon = month + 1;
$('#month').html((newmon < 10 ? '0' : '') + newmon );

Po prostu rozwiązałem problem z miesiącem, tablica getMonth zaczyna się od 0 do 11.

Adeel Ishfaq
źródło
1

Po prostu dodaj znak plus przed wartością tekstową

var newValue = +currentValue + 1;
Agorreca
źródło
1

Możesz pomnożyć zmienną przez 1, aby zmusić JavaScript do konwersji zmiennej na liczbę za Ciebie, a następnie dodać ją do innej wartości. Działa to, ponieważ mnożenie nie jest przeciążone tak jak dodawanie. Niektórzy mogą powiedzieć, że jest to mniej jasne niż parseInt, ale jest to sposób na zrobienie tego i nie zostało jeszcze wspomniane.

Ryan
źródło
-1

Możesz użyć metody parseInt (), aby przekonwertować ciąg znaków na liczbę całkowitą w javascript

Po prostu zmieniasz kod w ten sposób

$("replies").text(parseInt($("replies").text(),10) + 1);
Codemaker
źródło
Czym różni się to od powyższej odpowiedzi (która została opublikowana około 10 lat temu)?
Code Maniac