4

I have three div that contain a number.

<div class="a">10</div> 
<div class="b">20</div>
<div class="c">30</div>

I get the number inside each one with jQuery .html().

var val_1 = $('.a').html(), 
    val_2 = $('.b').html(),
    val_3 = $('.c').html();

How can I sum them?

This do not work as expected:

var total = val_1 + val_2 + val_3;

Since returned 102030, when I expected 60.

4
  • 2
    You are concatenating Strings. Commented Apr 7, 2014 at 22:35
  • Your variables are strings. You need to convert them to ints. var val_1 = parseInt($('.a').html(), 10); In JavaScript, + is both addition and string concatenation ("addition"). Commented Apr 7, 2014 at 22:35
  • 1
    Also, this is not a matter of jQuery, but a matter of JavaScript in general. Commented Apr 7, 2014 at 22:36
  • Will you only have one instance of each of the elements? Commented Apr 7, 2014 at 22:39

7 Answers 7

12

First, since you want only the content of your divs, you'd better use $('.x').text() instead of $('.x').html().

Now what's happening is that you're additioning strings, ie concatening them: '1' + '2' + '3soleil' === '123soleil'.

You want to parse them into numbers, which is done with

Number(val1) + Number(val2) + Number(val3)

If you know they're integers, you can more safely use Number.parseInt(val, 10) (the second variable of that function, called radix, is the mathematic base of your number. It's most likely a decimal number (10), but could be hexadecimal (16), boolean number (2), etc)

Sign up to request clarification or add additional context in comments.

2 Comments

If you're going to suggest parseInt() don't forget the radix.
Only answer to prefer .text() over .html(), only answer to prefer Number() over parseInt(). Thumbs up!
2

jsFiddle Demo

You could group them, use each to iterate, and total their parseInt numbers

var val = 0;
$('.a, .b, .c').each(function(){
 val += parseInt(this.innerHTML,10);
});
alert(val);

Comments

1

use parseInt because your div content is evaluate as string:

var val_1 = parseInt($('.a').html(),10), 
    val_2 = parseInt($('.b').html(),10),
    val_3 = parseInt($('.c').html(),10);

Comments

1

Use parseInt() on each variable; right now it's treating them as strings and concatenating them.

Comments

0

You need to parse the string value returned from .html() as an int using parseInt().

var val_1 = parseInt($('.a').html())

Comments

0

If you don't want to type (var + var), you could do the following.

Firstly, the issue in your code was that your variables were interpreted as strings, we can force the INT data-type like, so.

val_1 = parseInt($('.a').html()), 
val_2 = parseInt($('.b').html()),
val_3 = parseInt($('.c').html());

Then we aggregate the variables into a tidy array, then perform the .reduce() function, which is a sum function.

var aggregate = array(val_1, val_2, val_3);
aggregate.reduce(function(a,b){return a + b})

Comments

0

Use:

var total = parseInt(variable1+variable2);

This is a simple way and I use it to solve the NaN problem in jQuery.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.