parseInt on(class =)" h310"呈现NaN

时间:2014-04-23 11:46:57

标签: javascript jquery

我有一个像这样的元素

<span class='h310'>blah</span>

现在

console.log($(this).attr('class'));

呈现

"h310"

console.log(parseInt($(this).attr('class')));

呈现NaN而不是非常需要310

我在这里缺少什么以及如何解决这个问题?

更新

h确实是静态的,我只是添加它,因为根据HTML规范,“310”不是有效的类名,而“h310”是。

5 个答案:

答案 0 :(得分:3)

  

h是静态的

在这种情况下,您只需替换“h”并使用一元加号将字符串转换为数字:

+$(this).attr('class').replace('h', '');
> 310

JSFiddle demo

答案 1 :(得分:1)

由于类包含字符“h”,

parseInt方法在此处不起作用。

试试这个(“h”是静态的)

<span id="sp1" class='h310'>blah</span>

$(document).ready(function(){
    alert($('#sp1').attr('class'));
    alert(parseInt($('#sp1').attr('class').replace('h', ''),10));
});

对于一般解决方案,请使用正则表达式。

console.log(parseInt($('#sp1').attr('class').match(/\d+/),10));

直播DEMO

答案 2 :(得分:1)

您需要先提取字符串的数字部分。只有在字符串

的开头没有非数字字符时,parseInt才会自动提取它
var numberpart = $(this).attr('class').substring(1);
console.log(parseInt(numberpart, 10));  // make sure to provide the radix 10 for decimal numbers

答案 3 :(得分:1)

是的,显然它会返回NaN,因为parseInt方法不能用于字符串中的最后一个数字但是如果你有310h那么它可以用parseInt解析:

所以,在这里使用正则表达式:

console.log(parseInt($('span').attr('class').match(/\d+/),10));

working fiddle

作为@James你也可以这样使用:

$(this).attr('class').replace(/[a-zA-Z ]/g, '');

答案 4 :(得分:0)

试试这个

var str= $('span').attr('class');
var thenum = str.replace( /^\D+/g, '');
console.log(thenum)

DEMO