我正试图从w3资源中解决这个问题。问题:写一个JavaScript程序来寻找1月1日是2014年和2050年之间的周日。我试着解决它,并附上下面的代码。我可以正确地记录答案,但是当我试图用setInterval更新textNodes.data时,只有2043年,但我想让它通过所有的年份(答案)改变,每100毫秒记录一次。
console.log('January 1 Sunday for the following years:');
let getLeaps=(id)=>{
let target =document.getElementById(id);
let textNode =target.childNodes[0];
let text= textNode.data ;
let dates=new Date();
for(x=2014;x<=2050;x++){
dates.setFullYear(x, 01, 01);
let day = dates.getDay();
if (day==0){
let year0 = dates.getFullYear()
text=year0;
console.log(text);
textNode.data=text;
console.log(textNode.data);
}
}
}
getLeaps('target');
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<p id="target"> </p>
</body>
</html>
正如前面的答案所说,一月不是函数中的 "1 "月。setFullYear
是月份0,所以你需要在你的代码中更改这个值,以获得正确的结果。你也忘了将最后的结果附加到文本数据中,所以你的代码只会覆盖在 textNode.data
与去年发现的符合要求,所以我把它改成了用一个 +=
.
同样重要的是,要清楚地认识到价值 textNode.data
因为如果你运行函数 getLeaps()
在循环中,它将把新数据追加到textNode中的前一个数据上,做这样的事情。
2017 2023 2034 2040 2045 2017 2023 2034 2040 2045...
let getLeaps = (id) => {
let target = document.getElementById(id);
let textNode = target.childNodes[0];
let text = textNode.data;
textNode.data = "";
let dates = new Date();
for (x = 2014; x <= 2050; x++) {
dates.setFullYear(x, 0, 01);
let day = dates.getDay();
if (day == 0) {
let year0 = dates.getFullYear()
text = year0;
console.log(text);
textNode.data += text + ' ';
console.log(textNode.data);
}
}
}
getLeaps('target');
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<p id="target"> </p>
</body>
</html>