获取一个像字符串这样的数字,转换它并每秒添加一个

Get a number like string, convert it and add one every second

本文关键字:一个 转换 添加 字符串 获取 数字      更新时间:2023-09-26

我在面试中遇到了这个问题,但我失败了。我的答案很接近,但我没有完成剧本。问题是:从段落中获取文本,添加一个文本,然后每秒将新值放回段落中。我的逻辑是,在p中,数字是一个字符串。我用parseInt将其转换为数字,然后检查是否不是NaN,警报不是数字,否则用一个增加值并将其放回p中。

任何人请告诉我我错在哪里。

.JS:

$(function() {
    setInterval("addOne()", 1000);
});
function addOne() {
    var divP = $("div p").text();
    parseInt(divP);
    if (isNaN(divP)) {
        alert("Not a number!");
    } else {
        divP++;
        $("div p").text();
    }
}

.HTML:

<div>
    <p>1</p>
</div>

您有很多问题:

  • 您不会将parseInt()的结果分配给任何内容
  • 您没有向parseInt()提供radix参数
  • 您应该提供addOne()函数的引用setInterval()以避免本质上使用eval()
  • 您使用的是 text() 的 getter ,而不是设置divP的值

下面是一个工作示例:

$(function() {
    setInterval(addOne, 1000);
});
function addOne() {
    var divP = parseInt($("div p").text(), 10);
    if (isNaN(divP)) {
        alert("Not a number!");
    } else {
        $("div p").text(++divP);
    }
}

示例小提琴

也可以说,调用alert()来显示 UI 状态信息(尤其是在每秒调用一次的函数中)不是很好的做法。

我可以找到 3 个错误。

  1. 您没有将parseInt(divP)分配给任何内容。

    应该是: divP = parseInt(divP);

  2. 您没有正确使用setInterval

    应为:setInterval(function(){ addOne(); }, 1000);

  3. 您没有将新值放入元素$("div p").text();

    应为:$("div p").text(divP);

做这样的事情:

$(function() {
    setInterval(function(){ addOne(); }, 1000);
});
function addOne() {
    var divP = $("div p").text();
    divP = parseInt(divP);
    if (isNaN(divP)) {
        alert("Not a number!");
    } else {
        divP++;
        $("div p").text(divP);
    }
}

小提琴

你可以使用这个

    $("div p").html();

而不是

    $("div p").text();

不好意思它必须是HTML而不是val,因为val用于输入元素。谢谢

你可以在这里找到答案。
.HTML

 <div>
 <button id="btnClickStart" >
 Start Increment
 </button>
 <button id="btnClickStop">
 Stop Increment
 </button>
 <p id="pId">
 I am testing this script if it will work the 1st time.
 </p>
</div>

JAVASCRIPT
$('#btnClickStart').click(function() {
startIncrement();
});
$('#btnClickStop').click(function() {
stopIncrement();
});
var myInterval ;
function startIncrement(){
myInterval = setInterval(function(){ addOne(); }, 1000);
}
function stopIncrement() {
clearInterval(myInterval);
}
var _array = [];
function addOne() {
var divP = document.getElementById('pId').innerHTML;
var _array = [];
for (var i = 0, len = divP.length; i < len; i++) {
    parseInt(divP[i]);
  if (isNaN(divP[i])) {
    //alert("Not a number!");
       } else{
            _array.push(divP[i]);
    }
 }
  for (var j = 0, len = _array.length; j < len; j++) {
    _str =parseInt( _array[j]);
    if(!isNaN(_str) ){
      divPLast= divP.replace(_str, parseInt(_str)+1);
     }
   }
    document.getElementById('pId').innerHTML = divPLast; 
 }