Javascript 从1计数到24,然后重新启动

Javascript 从1计数到24,然后重新启动,javascript,jquery,html,Javascript,Jquery,Html,我创建了一个计数器,计数范围从0到24,当它达到24时: setInterval(function(){DayAndNight()}, 1000); var iState = 12; function DayAndNight() { //console.log('test'); switch(iState) { case 1: { doc

我创建了一个计数器,计数范围从0到24,当它达到24时:

setInterval(function(){DayAndNight()}, 1000);

    var iState = 12;

    function DayAndNight()
    {
        //console.log('test');
        switch(iState)
        {

            case 1:
            { 
                document.getElementById("time").innerHTML = "1";  
                iState++;
                break;  
            }

            case 2:
            {
                 document.getElementById("time").innerHTML = "2";   
                 iState++;
                 break;    
            }     

            case 3:
            {
                 document.getElementById("time").innerHTML = "3";
                iState++;
                break;
            }
一直到24点,我回到iState1:

            case 24:
            {
                document.getElementById("time").innerHTML = "24";
                iState = 1;                                 
                break;                     
            } 
这工作得很好,我可以将它设置为从iState 12开始,所以它不只是从0到24计数

然而,我想知道是否有更简单的方法来完成这项任务?这是一个简单函数的大量代码。我尝试过这样的东西:

var time = setInterval(function(){TimeNumber();},1000);

function TimeNumber()
{
  for (var i=0;i<23;i++)
  document.getElementById("time").innerHTML = ???;  
}
var time=setInterval(函数(){TimeNumber();},1000);
函数TimeNumber()
{
对于(var i=0;i

或者不使用jQuery:

setInterval(function() {
    var el = document.getElementById('time'),
        n  = parseInt(el.innerHTML,10);

    el.innerHTML = (n>=24?0:n+1);
},300);

或者不使用jQuery:

setInterval(function() {
    var el = document.getElementById('time'),
        n  = parseInt(el.innerHTML,10);

    el.innerHTML = (n>=24?0:n+1);
},300);
试试这个

var time = setInterval(TimeNumber, 1000);
var iState = 1;

function TimeNumber() {
    iState++;

    document.getElementById("time").innerHTML = iState;
    if (iState == 24) iState = 0;

}

试试这个

var time = setInterval(TimeNumber, 1000);
var iState = 1;

function TimeNumber() {
    iState++;

    document.getElementById("time").innerHTML = iState;
    if (iState == 24) iState = 0;

}

试一试:

var time = setInterval(function(){TimeNumber();},1000);
var iState = 1;

function TimeNumber()
{
  document.getElementById("time").innerHTML = iState;
  iState++;

  if (iState === 25) {
    iState = 1;
  } 
}
试一试:

var time = setInterval(function(){TimeNumber();},1000);
var iState = 1;

function TimeNumber()
{
  document.getElementById("time").innerHTML = iState;
  iState++;

  if (iState === 25) {
    iState = 1;
  } 
}
另一种选择

HTML

此解决方案有一些优点,因为
iState
现在包含在一个闭包中,以后不会在脚本中意外修改。(接受的答案使用一个本地全局值,可以稍后更改,如果设置为大于25,则计数将永远不会重置,因为
=
检查)

此解决方案也不会破坏名为
time
的元素的内容(接受的答案使用
innerHTML
),只更新它自己的节点。因此,您可以愉快地从
time
元素添加或删除内容

此解决方案还缓存id为
time
的元素,因此不会在每次更新时在DOM中查找该元素

innerHTML
在更新表(即和Konquer)时也不起作用,此解决方案将起作用。(您尚未指定元素是什么,但我猜它不是您最初使用的
innerHTML

任何不存储
setInterval
id的答案都不能稍后在脚本中使用
clearInterval

另一个选项停止

HTML

此解决方案有一些优点,因为
iState
现在包含在一个闭包中,以后不会在脚本中意外修改。(接受的答案使用一个本地全局值,可以稍后更改,如果设置为大于25,则计数将永远不会重置,因为
=
检查)

此解决方案也不会破坏名为
time
的元素的内容(接受的答案使用
innerHTML
),只更新它自己的节点。因此,您可以愉快地从
time
元素添加或删除内容

此解决方案还缓存id为
time
的元素,因此不会在每次更新时在DOM中查找该元素

innerHTML
在更新表(即和Konquer)时也不起作用,此解决方案将起作用。(您尚未指定元素是什么,但我猜它不是您最初使用的
innerHTML


任何不存储
setInterval
id的答案都不能在以后的脚本中使用
clearInterval
停止所有这些答案,并且没有模数除法。这是我的2美分

var time = setInterval(TimeNumber, 1000);
var iState = 1;

function TimeNumber() {
    document.getElementById("time").innerHTML = iState;
    iState = (iState % 24) + 1;
}

所有这些答案,没有模数除法。这是我的2美分

var time = setInterval(TimeNumber, 1000);
var iState = 1;

function TimeNumber() {
    document.getElementById("time").innerHTML = iState;
    iState = (iState % 24) + 1;
}

var time=setInterval(TimeNumber,1000);
更干净。是的,删除switch语句并使用
innerHTML=iState
而不是数字,然后使用if语句重置为0(如果是24)。有24个做同样事情的开关盒有点多余。只需使用模(%)运算符。继续递增计数器,但显示(计数器%24)。
var time=setInterval(TimeNumber,1000);
更干净。是的,删除switch语句并使用
innerHTML=iState
而不是数字,然后使用if语句在24时重置为0。有24个开关盒做同样的事情有点多余。只需使用modulo(%)运算符。继续增加计数器,但显示(计数器%24).OP实际上已将规范更改为1到24 OP实际上已将规范更改为1到24