2016-02-11 71 views
0

爲了讓我的代碼更易讀,更簡單,我打破我的頭在這一段代碼:簡化的setInterval

var refresh = setInterval(datumTijd, 1000); 

function datumTijd() { 
    document.getElementById("tijd1").innerHTML = tijd(); 
    document.getElementById("tijd2").innerHTML = tijd(); 
} 

function tijd(){ 
    var d1 = new Date(), 
     minutes = d1.getMinutes().toString().length == 1 ? '0'+d1.getMinutes() : d1.getMinutes(), 
     hours = d1.getHours().toString().length == 1 ? '0'+d1.getHours() : d1.getHours(); 
    return hours+ ':' +minutes; 
} 

雖然這樣做的工作,我有一種感覺,有一個功能太多了,這是document.getElementById - 位我更新兩個不同的<div> s。由於return代碼的原因,我無法找到擺脫這部分的方法。

我嘗試:

var refresh = setInterval(tijd, 1000); 

function tijd(){ 
    var d1 = new Date(), 
     minutes = d1.getMinutes().toString().length == 1 ? '0'+d1.getMinutes() : d1.getMinutes(), 
     hours = d1.getHours().toString().length == 1 ? '0'+d1.getHours() : d1.getHours(); 
    return hours+ ':' +minutes; 
    document.getElementById("tijd1").innerHTML = d1; 
} 

但沒有回來:(

+3

當你執行'return'時,它結束該函數。將其更改爲變量賦值,然後將其放入'innerHTML'中。 – Barmar

+1

其實我覺得你的2個函數是有意義的,你甚至可以做第3個函數來設置一個元素的內部html;) – Icepickle

+1

不完全相關,但這些三元運算符看起來很糟糕。你可以用'substr'加上前導零,就像'hours =('0'+ d1.getHours())。substr(-2);' – Teemu

回答

2

你從函數返回你把任何東西到innerHTML前,你也把錯誤的東西在。 innerHTML

function tijd(){ 
    var d1 = new Date(), 
     minutes = d1.getMinutes().toString().length == 1 ? '0'+d1.getMinutes() : d1.getMinutes(), 
     hours = d1.getHours().toString().length == 1 ? '0'+d1.getHours() : d1.getHours(), 
     time = hours+ ':' +minutes; 
    document.getElementById("tijd1").innerHTML = time; 
    document.getElementById("tijd2").innerHTML = time; 
} 

我實在不明白一個問題,分離,創建與將其放在innerHTM的一個時間字符串函數L,就像你原來的代碼一樣。你可能有其他需要時間的地方,所以有必要將它分成它自己的功能。我會想辦法讓你的原代碼的唯一變化是使用一個變量,而不是調用函數兩次:

您還可以標記與jQuery的問題,所以你可以簡化與分配:

function datumTijd() { 
    $("#tijd1, #tijd2").text(tijd()); 
} 
+0

它總是可以使用一個名爲'function setHtml(selector,value){(document.querySelectorAll(selector)|| [])的額外方法。forEach(function(item){item.innerHTML = value;}); }(或者這個動作的一些簡單形式;)(forEach當''use strict''被設置在某個地方時:D) – Icepickle

+0

感謝您編輯Barmar,我實際上只是爲了那部分而打google,但現在不需要! –