在javascript / jQuery中将string转换为数字

一直试图将以下转换为数字:

<button class="btn btn-large btn-info" data-votevalue="1"> <strong>1</strong> </button> 
 var votevalue = parseInt($(this).data('votevalue')); 

我也尝试过Number()但是在检查结果时我还是得到了NaN 。 我究竟做错了什么?

这里是完整的代码:

 <div class="span7" id="button-group"> <div class="btn-group"> <button class="btn btn-large btn-info" data-votevalue="1"><strong>1</strong></button> <button class="btn btn-large btn-info" data-votevalue="2"><strong>2</strong></button> <button class="btn btn-large btn-info" data-votevalue="3"><strong>3</strong></button> <button class="btn btn-large btn-info" data-votevalue="4"><strong>4</strong></button> <button class="btn btn-large btn-info" data-votevalue="5"><strong>5</strong></button> <button class="btn btn-large btn-info" data-votevalue="6"><strong>6</strong></button> <button class="btn btn-large btn-info" data-votevalue="7"><strong>7</strong></button> <button class="btn btn-large btn-info" data-votevalue="8"><strong>8</strong></button> <button class="btn btn-large btn-info" data-votevalue="9"><strong>9</strong></button> <button class="btn btn-large btn-info" data-votevalue="10"><strong>10</strong></button> </div> </div> 
 $('#button-group button').each(function() { $(this).click(function() { $(this).addClass('active'); var votevalue = parseInt($(this).data('votevalue')); var filename = $('.mainimage').data('filename'); var votes = parseInt($('.mainimage').data('numvotes')); var totalscore = parseInt($('.mainimage').data('totalscore')); $.ajax({ type: 'POST', url: 'index.php/?category=vote', data: { "votevalue": votevalue, "filename": filename }, success: function() { votes++; alert(votes); var average = ((totalscore + votevalue) / votes); $('#vote-incremenet').html(votes); $('#display-average').html(average); $('#display-average').show(); $('#button-group button').each(function(){ $(this).unbind('click'); }); } }); // end ajax }); // end click }); // end each 

这听起来像你的代码是不是指你的.btn元素。 尝试使用select器显式引用它:

 var votevalue = parseInt($(".btn").data('votevalue'), 10); 

另外,不要忘记基数。

您可以使用parseInt(string,基数)将string值转换为整数,如下面的代码

 var votevalue = parseInt($('button').data('votevalue'));​ 

DEMO

虽然这是一个旧的post,我认为一个简单的函数可以使代码更具可读性,并保持jQuery链式代码风格:

 String.prototype.toNum = function(){ return parseInt(this, 10); } 

可以用于jQuery:

 var padding_top = $('#some_div').css('padding-top'); //string: "10px" var padding_top = $('#some_div').css('padding-top').toNum(); //number: 10` 

或与任何String对象:

 "123".toNum(); //123 (number)` 

你应该在$(this)之前使用“+”。 这将把string转换为数字,所以:

 var votevalue = +$(this).data('votevalue'); 

哦,我build议使用closest()方法,以防万一:)

 var votevalue = +$(this).closest('.btn-group').data('votevalue'); 

这听起来像是指你想的其他东西。 你在什么情况下使用它?

this关键字通常只用在一个事件处理程序的callback函数中,当你遍历一组元素或类似的东西时。 在这种情况下,它指的是一个特定的DOM元素,可以像你一样使用。

如果您只想访问特定的button(在任何callback或循环外部),并且没有任何其他使用btn-info类的元素,则可以执行如下操作:

 parseInt($(".btn-info").data('votevalue'), 10); 

如果你想确保只有一个元素与你的select器相匹配,你也可以为元素分配一个ID,并使用它来select,这可能是一个更安全的方法。

你可以在string之前加一个+而不使用parseInt和parseFloat和radix

样品:

 var votevalue = +$('button').data('votevalue'); alert(typeof(votevalue)); 

对于你的情况,只需使用:

 var votevalue = +$(this).data('votevalue'); 

有一些方法可以在javascript中将string转换为数字。

最好的办法:

 var str = "1"; var num = +str; //simple enough and work with both int and float 

你也可以:

 var str = "1"; var num = Number(str); //without new. work with both int and float 

要么

 var str = "1"; var num = parseInt(str,10); //for integer number var num = parseFloat(str); //for float number 

别:

 var str = "1"; var num = new Number(str); //num will be an object. typeof num == 'object' 

例如,仅对特殊情况使用parseInt

 var str = "ff"; var num = parseInt(str,16); //255 var str = "0xff"; var num = parseInt(str); //255