在您的代码中:
> function DisplayTime(){
按照惯例,以大写字母开头的标识符是为构造函数保留的。普通函数名称应以小写字母开头。
> if (!document.all && !document.getElementById)
> return
> timeElement=document.getElementById? document.getElementById("mytime"): document.all.tick2
我怀疑是否有任何需要使用document.all的浏览器,您可以用一块石头杀死两只鸟:
var timeElement = document.getElementById && document.getElementById("mytime");
if (!timeElement) return;
.
> var CurrentDate=new Date()
请注意,按照惯例,以大写字母开头的变量名是为构造函数保留的。由于这个变量是内部的,而且很明显它是一个日期对象,并且是这个函数中唯一的日期对象,为了方便起见,考虑缩短名称:
var d = new Date();
.
> var hours=CurrentDate.getHours()
> var minutes=CurrentDate.getMinutes()
> var seconds=CurrentDate.getSeconds()
> var DayNight="PM"
> if (hours<12) DayNight="AM";
> if (hours>12) hours=hours-12;
> if (hours==0) hours=12;
> if (minutes<=9) minutes="0"+minutes;
> if (seconds<=9) seconds="0"+seconds;
> var currentTime=hours+":"+minutes+":"+seconds+" "+DayNight;
您可以使用一个小的辅助函数来填充值以及一些方便的运算符和方法,从而使所有这些变得更短:
function addZ(n){return (n<10? '0' : '') + n;}
var h = d.getHours();
var ampm = h < 12? 'AM' : 'PM';
h = h % 12 || 12;
var timeString = [addZ(h), addZ(d.getMinutes()), addZ(d.getSeconds())].join(':');
.
> timeElement.innerHTML="<font style='font-family:verdana, arial,tahoma;font- size:12px;color:#E25984; font-weight:bold;'>"+currentTime+"</b>"
所有这些样式都应该直接应用于包含元素,并且 HTML 无论如何都是无效的(字体标签在 HTML 4 中已被弃用,在 HTML 5 中被删除,标签不平衡)。您可以提供强大的setText函数来设置元素的文本内容,而不是替换 innerHTML (见下文)。
> setTimeout("DisplayTime()",1000)
> }
不要将字符串传递给setTimeout,它是通过 Function 构造函数传递的,传递函数是一种缓慢且低效的方式,只需传递一个引用即可。此外,将函数设置为在下一整秒之后运行。所以完整的功能变成:
// This looks long winded, but it provides a robust way to set
// the text content for any browser in use. Since this uses a
// function expression, it must be before any code that calls setText
var setText = (function() {
var div = document.createElement('div');
if (typeof div.textContent == 'string') {
div = null;
return function (el, s) {
el.textContent = s;
}
} else if (typeof div.innerText == 'string') {
div = null;
return function (el, s) {
el.innerText = s;
}
} else {
div = null;
return function (el, s) {
while (el.firstChild) {
el.removeChild(el.firstChild);
}
el.appendChild(document.createTextNode(s));
}
}
}());
function displayTime(){
var timeElement = document.getElementById && document.getElementById("mytime");
if (!timeElement) return;
var d = new Date();
function addZ(n){return (n<10? '0' : '') + n;}
var h = d.getHours();
var ampm = h < 12? 'AM' : 'PM';
h = h % 12 || 12;
var timeString = [addZ(h), addZ(d.getMinutes()), addZ(d.getSeconds())].join(':') + ' ' + ampm;
if (typeof timeElement.textContent == 'string') {
timeElement.textContent = timeString;
} else if (typeof timeElement.innerText == 'string') {
setText(timeElement, timeString);
}
// Schedule to run just after next full second
setTimeout(displayTime, 1020 - d.getMilliseconds());
}
// Start when page loads
window.onload = displayTime;
和 HTML:
<div id="mytime"></div>