39

I have an element in javascript like follows:

 <span>280ms</span>

I want to extract 280 from the span element. How can I do it? The content within the span element will be any number followed by ms.

1
  • Similar question, best answer Commented Jan 21, 2016 at 13:25

10 Answers 10

84

parseInt() is pretty sweet.

HTML

<span id="foo">280ms</span>

JS

var text = $('#foo').text();
var number = parseInt(text, 10);
alert(number);

parseInt() will process any string as a number and stop when it reaches a non-numeric character. In this case the m in 280ms. After have found the digits 2, 8, and 0, evaluates those digits as base 10 (that second argument) and returns the number value 280. Note this is an actual number and not a string.

Edit:
@Alex Wayne's comment.
Just filter out the non numeric characters first.

parseInt('ms120'.replace(/[^0-9\.]/g, ''), 10);
Sign up to request clarification or add additional context in comments.

8 Comments

This is the best answer. Note that though the 10 parameter in parseInt is optional, you should use it to prevent accidental parsing of a number as octal. If the span contains "0700ms", that will not return 700 as a result but will be 448!
@Jacob is right. 10 is not the default if you omit it. Instead javascript tries to guess based on the string format. History has proven that making javascript try to guess anything leads to pain and suffering. So, always explicitly call out your radix.
What about parsing ms120 to get 120?
@ThomasClowes Just filter out the non numeric characters first. parseInt('ms120'.replace(/[^0-9\.]/g, ''), 10);
@AlexWayne You should include your last comment as part of answer. A simple parseInt() won't work if the string doesn't begin with number like already noted in comments.
|
19

Try this:

var num = document.getElementById('spanID').innerText.match(/\d+/)[0];

jQuery version:

var num = $('span').text().match(/\d+/)[0]; // or $('#spanID') to get to the span

If you want as numeric value (and not as string), use parseInt:

var num = parseInt($('span').text().match(/\d+/)[0], 10);

1 Comment

Using parseInt(), you don't need the regex matching. Kudos for providing the radix parameter, though.
12

Try the following

var strValue = // get 280m from the span
var intValue = parseInt(strValue.match(/[0-9]+/)[0], 10);

Comments

4

You could use the parseInt() function

var number = parseInt($("span").text())

1 Comment

+1 However, you should provide the radix parameter to parseInt().
0

Change the span in:

<span id='msSpan'>280ms</span>

Then you can do:

alert($('#msSpan').text());

Comments

0

Will it always end in "ms"? You can do:

var num = s.substring(0, s.length-2) 

where s is the string in the span. To get this value, you can use text(), html(), or innerHTML on the span.

Comments

0

in general for numbers no mather negative or positive

<div>
  blah blah
  <span>285blahblah</span>
</div>

var html= document.getElementsByTagName('div')[0].innerHTML;// or $('div').html() if jquery

var number = parseFloat(html.match(/-*[0-9]+/));

http://jsfiddle.net/R55mx/

Comments

0

var myNumber= $('span').text().replace(/[^d.,]+/,'');

Comments

0

This extracted number from string for me:

function extractNumberFromString(inputString){

const number=[];

for(const char of inputString){

if(!isNaN(char)){

number.push(parseInt(char));

}

}

return number;

}

const i="election2025india";

console.log(extractNumberFromString(i));

//OUTPUT :- [ 2, 0, 2, 5 ]

Comments

-1

using jquery is pretty simple. probably better giving the span an id though

var mytext=replace($('span').text(),"ms","");

edited to remove ms

2 Comments

the OP wants only the number part of the .text()
This doesn't extract numbers, gives you the whole text.

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.