2011-08-29 46 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上執行與原始選擇器(也就是頁面上的每個「時間」元素)匹配的元素的所需結果。