javascript - javascript 遍历集合并填充一组值
问题描述
我有一个日期集合(包括时间),我需要遍历集合并根据用户输入的日期插入正确的日期和时间。在 html 文档的末尾,显然我有 javascript;js 将遍历表格并插入正确的日期
因此,如果某个日期恰好在今天之前,则日期计数器将显示为负数(我稍后会处理将其归零)但如果日期在未来,则计时器应显示正确的时间..
我在使用此应用程序时面临的问题是日期集合显示的日期相同。所以不管我的收藏中有 100 个日期还是 1 个日期,计时器都会在计时器上显示相同的日期。
我没有以正确的方式执行每个集合。我也没有正确地获取类名。我想这就是为什么计时器中的日期显示相同的原因。所以它抓住了 js 可以抓取的第一个日期并填充所有具有相同日期的计时器
<!DOCTYPE html>
<html lang="">
<head>
<meta charset="UTF-8">
<title>Untitled Document</title>
<meta name="Author" content="" />
</head>
<body>
<section>
<table>
<tr>
<td class="for-sale-heading">
<h4>End Date: </h4>
<h5 class="time">04-30-22 15:00:00</h5>
</td>
<td class="for-sale-heading">
<div class="clock">
<div>
<span class="day"></span>
<div class="local-date">Days</div>
</div>
<div>
<span class="hour"></span>
<div class="local-date">Hours</div>
</div>
<div>
<span class="minute"></span>
<div class="local-date">Minutes</div>
</div>
<div>
<span class="second"></span>
<div class="local-date">Seconds</div>
</div>
</div>
<p class="closed"></p>
</td>
</tr>
</table>
<table>
<tr>
<td class="for-sale-heading">
<h4>End Date: </h4>
<h5 class="time">04-30-20 15:00:00</h5>
</td>
<td class="for-sale-heading">
<div class="clock">
<div>
<span class="day"></span>
<div class="local-date">Days</div>
</div>
<div>
<span class="hour"></span>
<div class="local-date">Hours</div>
</div>
<div>
<span class="minute"></span>
<div class="local-date">Minutes</div>
</div>
<div>
<span class="second"></span>
<div class="local-date">Seconds</div>
</div>
</div>
<p class="closed"></p>
</td>
</tr>
</table>
</section>
<script type="application/javascript">
$(document).ready(function() {
const timeClasses = document.getElementsByClassName("time");
Array.prototype.forEach.call(timeClasses, function(timeClass) {
const x = setInterval(function() {
// const innerHtml1 = $('.time').html();
const innerHtml = timeClass.innerHTML;
const deadline = new Date(innerHtml.toString()).getTime();
const now = new Date().getTime();
const t = deadline - now;
const days = Math.floor(t / (1000 * 60 * 60 * 24));
const hours = Math.floor((t % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
const minutes = Math.floor((t % (1000 * 60 * 60)) / (1000 * 60));
const seconds = Math.floor((t % (1000 * 60)) / 1000);
const spanElements = document.getElementsByTagName("span");
Array.prototype.forEach.call(spanElements, function(spanElement) {
// console.log(el.className);
// console.log(el.getElementsByClassName);
switch (spanElement.className) {
case "day":
// console.log("day");
$('.day').html(days); // or use el.innerHTML = days;
break;
case "hour":
// console.log("hour");
$('.hour').html(hours); // or use el.innerHTML = hours;
break;
case "minute":
// console.log("minute");
$('.minute').html(minutes); // or use el.innerHTML = minutes;
break;
case "second":
// console.log("second");
$('.second').html(seconds); // or use el.innerHTML = seconds;
break;
}
});
}, 1000);
});
});
</script>
</body></html>
解决方案
数字闪烁
您正在使用延迟为零毫秒的 setInterval 方法,它会尝试尽可能快地刷新数字(为什么数字似乎在闪烁)。
const x = setInterval(function() {
// code here,
0 // <-- delay
});
如果将延迟设置为更大的数字(例如 1000 毫秒),数字将停止闪烁
const x = setInterval(function() {
// code here,
1000 // <-- delay
});
数字相同
您正在引用类名来设置 html 中的数字
$('.day').html(days);
这不起作用,因为每个日期的元素具有相同的类名,您需要使用 ID 来引用正确的元素。
有关示例,请参见此 JSFiddle:https ://jsfiddle.net/2qf30v9m/
推荐阅读
- sql - LIKE 函数如何处理空字段?
- c# - 如何在 IIS Express Web 服务器中运行 localhost:80?
- embedded - 支持 Nordic 52 系列 AMS 的 TMG4903 传感器开发代码
- react-native - 我可以在显示通知之前修改博览会推送通知的标题/正文吗?
- javascript - 如何修复重叠标签(顶点图)?
- json - 如何与需要 Flutter 密钥的 REST API 交互?
- graphql - GraphQL 解析器 - 何时使解析器函数异步?
- mysql - 同一事务中的多个无序读取查询会返回相同的结果吗?
- c++ - 从文件中获取并输出二进制数据
- react-native - 解决方法博览会反应原生网络闪屏