2011-08-29 53 views
2

我有以下代码:HTML5“时间”标签没有设定值正确

<html> 
<script> 


setInterval("settime()", 1000); 

function settime() { 
    var dateTime = new Date(); 
    var hours = dateTime.getHours(); 
    var minutes = dateTime.getMinutes(); 
    var time = ""; 

    if (hours === 0) { 
    hours = 12; 
    } 

    time = (hours > 12 ? hours - 12 : hours) + ":" + 
     (minutes < 10 ? "0" : "") + minutes + (hours > 12 ? "PM" : "AM"); 

    // Doesn't work at all... 
    document.getElementsByTagName('time').textContent = time; 
    document.getElementsByTagName('time').innerHTML = time; 


    console.log('Time set with js: ' + document.getElementsByTagName('time').textContent); 

    // Works fine... 
    //$('time').text(time); 
} 
</script> 

<body> 

    <time></time> 

</body> 
</html> 

为什么经常JS不能工作,但jQuery的text()工作得很好?

Fiddle

回答

3

由于document.getElementsByTagName哪个元素返回一个nodeList而不是一个元素,你必须指定哪一个。节点列表像阵列一样工作,所以:

document.getElementsByTagName('time')[0].innerHTML = time; 

工作。

http://jsfiddle.net/4EqxW/3/

+0

我想你会赢得一个不错的7秒:) –

+0

呃,打我回答。 – mc10

+0

哇,他在这里7秒之后我,而不是相反;-)(19:30:14Z与19:30:08Z) –

1

注意document.getElementsByTagName('time')[0].部分

http://jsfiddle.net/4EqxW/4/

getElementsbyTagName正在恢复的节点(节点列表)的阵列,所以你必须specifiy到您正在accesing属性

+1

Arg ....是啊你是对的...谢谢 –

0

尝试

document.getElementsByTagName('time')[0].textContent = time; 
document.getElementsByTagName('time')[0].innerHTML = time; 

注意getElementsByTagName返回一个节点列表,这是一个数组,而不是一个单一的元件。 Results of code change.

1

马雷克Sebera和“amosrivera回答说:”你的问题“)文本(”第一部分(主要部分)

再回答你问题的第二部分...

jQuery的方法将在ALL上执行与原始选择器(也就是页面上的每个“时间”元素)匹配的元素的所需结果。