WordPress中适配本地时区的span时间JS脚本突然失效求助
脚本未正确加载:
检查页面源码,确认timezone.js的加载路径是否正确,有没有404错误。可能是子主题文件结构变动(比如js/timezone.js丢失、文件名大小写错误,Linux服务器区分大小写),或者get_stylesheet_directory_uri()返回的路径因主题更新发生变化。浏览器缓存残留:
即使关闭了WP Rocket,浏览器本地可能仍缓存旧脚本。尝试强制刷新页面(Ctrl+F5)或清空浏览器缓存后再测试。DOM元素获取逻辑问题:
你使用的document.getElementsByClassName('time')返回的是动态HTMLCollection,如果循环过程中DOM发生变化(比如元素被修改、移除),会导致集合自动更新,可能出现索引错乱。建议换成静态的document.querySelectorAll('.time'),它返回的NodeList不会随DOM变化而改变,循环更稳定:const timeArray = document.querySelectorAll('.time');时区计算逻辑错误:
代码中硬编码了夏令时调整-60(d.setMinutes(d.getMinutes()-offset-60)),如果当前已过夏令时时段,这个额外的分钟调整会导致时间计算错误。可以注释掉-60测试,或者改用更可靠的时区转换方式:// 基于UTC时间构造,再转本地时区 const utcDateStr = `${new Date().toISOString().split('T')[0]}T${timeArray[i].innerHTML}:00Z`; const localDate = new Date(utcDateStr); // 从localDate中提取本地小时、分钟等进行后续格式处理JS执行中断(控制台错误):
打开浏览器开发者工具(F12)的Console面板,查看是否有JS报错:- 若页面中
.time元素的内容格式变化(比如不再是HH:MM),split(':')后数组长度异常,会导致setHours/setMinutes传入非数字值,Date对象失效。 - 其他主题/插件的JS脚本抛出错误,会阻断你的脚本执行。
window.onload被其他脚本覆盖:如果其他脚本也用window.onload = function() {...},会覆盖你的回调,导致代码不执行。建议改用addEventListener:window.addEventListener('load', function() { // 你的代码逻辑 });
- 若页面中
动态生成的DOM元素:
如果近期主题更新后,.time元素是通过AJAX或其他动态方式加载的,window.onload执行时这些元素还未渲染,自然无法获取到。这种情况需要监听DOM变化(比如使用MutationObserver),或者在元素加载完成后再执行脚本。
内容的提问来源于stack exchange,提问作者Christian

