2010-11-15 4 views
5

J'ai un peu DIV comme ceci:jquery Faire des maths simples?

<div id="counter">2</div> 

Je voudrais utiliser JQuery soit soustraire ou ajouter en laisser dire 1, ce qui 3 ou 1 ...

est-il un moyen en jquery pour le faire? convertir une chaîne en un int peut-être?

+0

De plus, comment ajouter un plancher de 0? Je ne veux pas que des chiffres négatifs apparaissent! :) – AnApprentice

+2

utilisez Math.max (votre numéro, 0) pour vous assurer qu'il n'y aura pas de nombres négatifs – Adam

Répondre

4
$('#counter').text(function(i,txt) { return parseInt(txt, 10) + 1; }); 

Exemple pour l'addition:http://jsfiddle.net/2uBMy/

Exemple pour la soustraction:http://jsfiddle.net/2uBMy/1/

Pour ajouter un chèque de négatif, vous pouvez le faire:

$('#counter').text(function(i,txt) { 
    var result = parseInt(txt, 10) - 1; 
    return (result > 0) ? result : 0; 
}); 
+0

que fait le txt, 10? – AnApprentice

+0

Il analyse le contenu de txt dans la base 10 – Jimmy

+1

@AnApprentice - Le 'txt' représente la valeur de texte courante de' # coutner', et le '10' s'assure que la valeur est analysée comme un nombre de base 10. S'il y a un '0 'en tête, il sera analysé comme un octal. – user113716

1
$('#counter').html( +($('#counter').html()) + 1); 
+3

Cela donnerait '' 11 "', à partir de '" 1 "+ 1'. Parce que string + int force l'int dans une chaîne, puis la concatène. –

+0

Oui ... corrigé. – AndreKR

1
var counter = $('#counter'); 
var value = parseInt(counter.html()); 
counter.html(value + 1); 
8
$('#counter').text(function(i, txt) { 
    return +txt + 1; 
}); 

De cette manière, le contenu de #counter est converti en un nombre entier. Cela fonctionne très bien pour les nombres, mais si pour une raison quelconque quelque chose comme "foo123" est le contenu, il deviendrait NaN.

donc une autre façon de l'analyser est d'utiliser .parseInt()

$('#counter').text(function(i, txt) { 
    return parseInt(txt, 10) + 1; 
}); 

parseInt() attend deux arguments, une valeur et un radix (nombre de base). Si ceci est invoqué sur "foo123" il retournera "123". On pourrait dire que c'est un mauvais comportement, donc vous devez décider quelle variante vous voulez avoir.

Exemple: http://www.jsfiddle.net/Mtvju/

Ref .: .text()

+0

+1 Wow, je ne savais pas qu'un rappel est possible. Est-ce avec '.html()', aussi? – AndreKR

+0

txt + 1 donnerait 21 – generalhenry

+0

@generalhenry - Il fait '+ txt' qui convertit la chaîne en nombre. – user113716

0

Oui, le convertir en un int. Utilisez parseInt pour le convertir en entier. Utilisez ensuite .html de jQuery pour obtenir le contenu du <div> et remplacer ces contenus par la nouvelle valeur.

$("#counter").html(parseInt($("#counter").html(),10) + 1) 
$("#counter").html(parseInt($("#counter").html(),10) - 1) 

Try it here!

0

javascript est faiblement typé. Vous pouvez utiliser des chaînes contenant des nombres et des nombres comme s'ils étaient tous les deux utilisés dans la plupart des cas. Le seul endroit à faire attention est le +, qui est à la fois ajouter et concaténer. Vous devez désambiguïser en quelque sorte.

function subtract() 
{ 
    count = $('#counter').html(); 
    if(count > 0) 
    { 
    count--; 
    } 
    $('#counter').html(count) 
}