简体   繁体   English

Javascript的多个实际时间(GetElementById)

[英]Javascript multiple actual time (GetElementById)

I want to show multiple actual time on one page. 我想在一页上显示多个实际时间。 The script works, but not very efficient for a user. 该脚本有效,但对用户而言效率不高。 I feel like a amateur right now... 我现在就像个业余爱好者...

My script is this right now: 我的脚本现在是这样的:

<script>
function startTime() {
    var today = new Date();
    var h = today.getHours();
    var m = today.getMinutes();
    var s = today.getSeconds();
    m = checkTime(m);
    s = checkTime(s);
    document.getElementById('time').innerHTML =
    h + ":" + m + ":" + s;
    var t = setTimeout(startTime, 500);
    document.getElementById('time2').innerHTML =
    h + ":" + m + ":" + s;
    var t = setTimeout(startTime, 500);
    document.getElementById('time3').innerHTML =
    h + ":" + m + ":" + s;
    var t = setTimeout(startTime, 500);
    document.getElementById('time4').innerHTML =
    h + ":" + m + ":" + s;
    var t = setTimeout(startTime, 500);
    document.getElementById('time5').innerHTML =
    h + ":" + m + ":" + s;
    var t = setTimeout(startTime, 500);
    document.getElementById('time6').innerHTML =
    h + ":" + m + ":" + s;
    var t = setTimeout(startTime, 500);
    document.getElementById('time7').innerHTML =
    h + ":" + m + ":" + s;
    var t = setTimeout(startTime, 500);
    document.getElementById('time8').innerHTML =
    h + ":" + m + ":" + s;
    var t = setTimeout(startTime, 500);
    document.getElementById('time9').innerHTML =
    h + ":" + m + ":" + s;
    var t = setTimeout(startTime, 500);
    document.getElementById('time10').innerHTML =
    h + ":" + m + ":" + s;
    var t = setTimeout(startTime, 500);
    document.getElementById('time11').innerHTML =
    h + ":" + m + ":" + s;
    var t = setTimeout(startTime, 500);
    document.getElementById('time12').innerHTML =
    h + ":" + m + ":" + s;
    var t = setTimeout(startTime, 500);
    document.getElementById('time13').innerHTML =
    h + ":" + m + ":" + s;
    var t = setTimeout(startTime, 500);
}
function checkTime(i) {
    if (i < 10) {i = "0" + i};  // add zero in front of numbers < 10
    return i;
}
</script>

It's not a very efficient way to do this... 这不是一个非常有效的方法...

Anybody a better way? 有人有更好的办法吗?

Thanks in advance! 提前致谢!

 function startTime() { var today = new Date(); var h = today.getHours(); var m = today.getMinutes(); var s = today.getSeconds(); m = checkTime(m); s = checkTime(s); var elems = document.getElementsByClassName('time'), i; for (i in elems) { elems[i].innerHTML = h + ":" + m + ":" + s; } var t = setTimeout(startTime, 500); } function checkTime(i) { if (i < 10) {i = "0" + i}; // add zero in front of numbers < 10 return i; } startTime(); 
 <p class="time"></p> <a href="#!" class="time"></a> 

Also, you could use some thir party lib like MomentJS to do the trick 此外,您还可以使用一些锡尔党的lib像MomentJS这样的伎俩

Update 更新资料

Now is Vanilla Js Only =D 现在是Vans Js Only = D

I loved @JaredSmith's version in the comment and since he's not posting it as an answer, here it is: 我喜欢评论中的@JaredSmith版本,因为他没有将其发布为答案,所以这里是:

 window.addEventListener('DOMContentLoaded', function() { 'use strict'; (function() { var intervalId = setInterval(function() { var now = new Date(); var h = now.getHours(); var m = now.getMinutes(); var s = now.getSeconds(); m = (m < 10) ? '0' + m : m; s = (s < 10) ? '0' + s : s; (document.querySelectorAll('.time')).forEach(el => el.textContent = h + ':' + m + ':' + s); }, 500); }()); // IIFE (Crockford-style) }); 
  <div class="time"></div> <p class="time"></p> <span class="time"></span> <ul> <li class="time"></li> <li class="time"></li> </ul> 

As commenters have pointed, you do not need to run multiple timers. 正如评论者所指出的,您不需要运行多个计时器。 Get the time at whatever rate you want, then you can display that same information in as many places as you like. 随心所欲地获取时间,然后可以在任意位置显示相同的信息。

EDIT: we don't need Array.from in modern browsers as querySelectorAll is iterable with forEach . 编辑:在现代浏览器中,我们不需要Array.from ,因为querySelectorAll可通过forEach迭代。

Here is a Internet Explorer compatible version, which is also a de-composed version that may be easier to follow: 这是与Internet Explorer兼容的版本,它也是分解后的版本,可能更容易理解:

var list = document.querySelectorAll('.time');
for (var elm in list) {
    if (list.hasOwnProperty(elm)) {
        list[elm].textContent = h + ':' + m + ':' + s;
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM