在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