2014-04-23 3 views
1

Я элемент, как такParseInt на (класс =) "H310" оказывает NaN

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

Теперь

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

оказывает

"h310"

но

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

оказывает NaN вместо очень нужного 310.

Что мне здесь не хватает и как это решить?

UPDATE

h действительно статично, я просто добавил это потому, что «310» не является допустимым именем класса в соответствии с HTML спецификации в то время как «H310» есть.

+1

Да, очевидно, она возвращает NaN как метод ParseInt не будет работать в течение последнего номера из строки .... –

+2

Согласно спецификации JavaScript: если строка начинается с результат char (не число) 'parseInt' будет' NaN'. Вы можете удалить первый символ из своей строки перед разбором или использовать RegEx. – Fedor

+0

Это потому, что 'h310' не является числом. Вы не хотите анализировать его как int, а вместо этого отфильтровывать нечисловые символы, а затем анализировать его как int. –

ответ

3

Н статична

В этом случае вы можете просто заменить «Н» и преобразовать строку в число с помощью одинарного плюс:

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

JSFiddle demo ,

+0

Это решение хуже всего, поскольку OP не сказал, что h статично ... –

+1

На самом деле я сам там сам 'h', потому что имя класса ** не может начинаться с цифры **. Хотя другие решения (особенно с использованием регулярных выражений) более общие, на данный момент я перейду к простейшему из них, который является «replace()». – RubenGeert

+1

@ C-link комментарий был отправлен на удаленном ответе. Если у вас достаточно репутации, вы можете просмотреть его здесь: http://stackoverflow.com/questions/23243345/parseint-on-class-h310-renders-nan/23243438#comment35563970_23243406 –

0

Попробуйте

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

DEMO

1

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

+0

radix всегда должен быть предоставлен – devnull69

+1

@ devnull69, что здесь не так, и почему downvote? – nrsharma

+2

parseInt имеет второй параметр (radix), который всегда должен быть предоставлен во избежание неоднозначностей ... иначе строка типа «016» приведет к числу «14», которое может быть неожиданным и нежелательным – devnull69

1

Вам нужно извлечь номер части строки первой.ParseInt только извлечь его автоматически, если нет нечислового символа в начале строки

var numberpart = $(this).attr('class').substring(1); 
console.log(parseInt(numberpart, 10)); // make sure to provide the radix 10 for decimal numbers 
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, ''); 
+0

Просьба указать radix – devnull69

+1

Что вы подразумеваете под radix ?????????? –

+1

parseInt имеет второй параметр (radix), который всегда должен быть предоставлен во избежание неоднозначностей ... иначе строка типа «016» приведет к числу 14, которое может быть неожиданным и нежелательным. – devnull69

Смежные вопросы