使用 Vanilla Javascript 在表格中显示倒计时

Posted

技术标签:

【中文标题】使用 Vanilla Javascript 在表格中显示倒计时【英文标题】:Displaying countdown in a table using Vanilla Javascript 【发布时间】:2019-03-13 05:53:19 【问题描述】:

我曾尝试使用 for 循环来显示我的倒计时,但我不知道我哪里弄错了。有没有更简单的方法来使用 vanilla javascript 显示每一行的倒计时?

下面是我的桌子:

<html>
<body> 
<table style="width:50%" id= "tab">
    <tr>
<th>Name</th>
<th>Exp</th>
<th>Count Down</th>
</tr>
    <tr>
     <td> A</td>
     <td class = 'exp1'> 09/08/2019</td>
     <td class = 'demo'> </td>   
    </tr>
    <tr>
     <td> B</td>
     <td class = 'exp1'> 09/08/2020</td>
     <td class = 'demo'> </td>   
    </tr>
</table>
</body>
</html>

下面是我的javascript代码:

<script>
var exp = document.getElementById('tab').getElementsByClassName('exp1');

var x = document.getElementById('tab').getElementsByClassName('demo');

var   now = new Date();
function test()

for (i = 0; i<exp.length; i++)
var  e = new Date( exp[i].innerHTML);
var  timeDiff = e.getTime() - now.getTime();
var seconds = Math.floor(timeDiff / 1000);
var minutes = Math.floor(seconds / 60);
var hours   = Math.floor(minutes / 60);
var days    = Math.floor(hours   / 24);
hours %=24;
minutes %=60;
seconds %=60;
var timer = setTimeout('test()', 1000);   


for (i=0; i<x.length; i++)
x[i].innerHTML = days  + " " +  hours + " " + minutes + " " + seconds;



</script>

【问题讨论】:

How do I loop through children objects in javascript?的可能重复 【参考方案1】:

首先,你应该给你的一个类属性而不是一个id,因为应该只有一个元素具有相同的id。

其次,可以用

获取所有元素
var elements = document.getElementsByClassName('demo')

第三,你可以这样做

var c;
for (c = 0; c < elements.length; c++) 
// calculate and change the value here
// for each elements[c]

更多解释见:https://www.w3schools.com/jsref/met_document_getelementsbyclassname.asp


编辑作为评论的答案:

你可以每秒调用一次函数

window.setInterval(function()
/// call your function here
, 1000);

见What's the easiest way to call a function every 5 seconds in jQuery?

关于如何从 timediff 计算时间,请参阅Check time difference in Javascript

要更改内部的值,请在 for 循环中添加以下内容

document.getElementsByClassName('demo')[c].innerHTML = newstring

这里已经回答了:Setting innerHTML: Why won't it update the DOM?

【讨论】:

我没有使用类名访问元素的问题,我的问题是它显示每一行的倒计时。

以上是关于使用 Vanilla Javascript 在表格中显示倒计时的主要内容,如果未能解决你的问题,请参考以下文章

javascript 使用vanilla JavaScript爬上DOM树

javascript 使用Vanilla JavaScript Shopify GraphQL Storefront API

javascript 使用Vanilla JavaScript Shopify GraphQL Storefront API

使用 vanilla JavaScript 在客户端处理 Firebase ID 令牌

javascript 使用vanilla JS观察对象属性更改

使用 Vanilla Javascript 发布到 Php 文件 [重复]