2012-06-12 72 views
1

所以感謝堆棧溢出,我確定document.write每次運行時都會破壞我的網頁/程序。我經常看到答案是使用innerhtml和document.getElementById,但是,在下面的情況下,我無法圍繞下面將如何使用它的過程,看到如何分配一個id來替換它。我想要下面的整個事情在單個div中重繪。它所做的就是取該數組,垂直吐出,並突出顯示與變量「速度」相匹配的數字。當您重新運行speedcounter功能時,該變量會發生變化,因此突出顯示的數字也會發生變化。我可以用什麼來代替document.write函數來程序化生成html?

有沒有更好的方法來做到這一點?

並感謝您的期待。

function speedcounter() { 

var spx; 
var speed = 3; 
var sp=["0","3","4","4","4","5","6","7","8"]; 

document.write(' <h2>Speed</h2></br>'); 
document.write('<input type="button" onclick="addspeed();" value="+"><br />'); 

for (spx=8; spx>=0; spx--) { 
    if (spx == speed) { 
     document.write('<font color=#00FF00>'); 
    } 
    document.write(sp[spx]); 
    document.write('<font color=#000000><br />'); 
    } 
document.write ('<input type="button" onclick="remspeed();" value="-">');  
} 
+0

只是一個側面說明,''標籤已經被廢棄了很長一段時間。改用CSS。 – j08691

+0

我不知道如何根據$ spx的當前狀態動態更改字體顏色,CSS可以實現嗎?這個想法是讓for循環發生的。 –

回答

1

如果您不想因爲任何原因使用jQuery,以下是僅限javascript的解決方案。

我創建一個div

<div id="speed"></div>​ 

然後用document.getElementById()innerHTML到HTML添加到它。我保留你的代碼結構來說明它將如何完成。我使用+=添加到div中現有的HTML。在函數的頂部,我清除它。如果不這樣做,每次調用函數時都會得到多個輸出副本。

function speedcounter() { 
document.getElementById('speed').innerHTML = ""; 
var spx; 
var speed = 3; 
var sp=["0","3","4","4","4","5","6","7","8"]; 

document.getElementById('speed').innerHTML += '<h2>Speed</h2></br>'; 
document.getElementById('speed').innerHTML += '<input type="button" onclick="addspeed();" value="+"><br />'; 

for (spx=8; spx>=0; spx--) { 
    if (spx == speed) { 
     document.getElementById('speed').innerHTML += '<span style="color:#00FF00">' + sp[spx] + '</span><br />'; 
    } else { 
     document.getElementById('speed').innerHTML += sp[spx] + "<br />"; 
    } 
} 
document.getElementById('speed').innerHTML += '<input type="button" onclick="remspeed();" value="-">';  
} 

speedcounter(); 

我也刪除您font標籤,並用span和內嵌CSS設置顏色替換它。

Demo

+0

謝謝!這正是我所期待的。我曾經想過,每次你調用innerhtml時,你都會完全替換它,但是我發現你已經添加了一個+符號來簡單地添加它。那就是我被卡住的地方。 –

+0

是的,這是加法賦值操作符。 'a = a + b'轉換爲'a + = b'。因此,在這種情況下,我正在使用innerHTML並添加一些內容,然後將其設置爲innerHTML。看起來更乾淨。 – sachleen

1

任何阻止你使用jQuery的東西?

以下鏈接使用jquery創建/附加dom元素。 How to create a DOM node as an object?

+0

感謝您的回覆和鏈接。我對jquery一無所知,因此我不得不在短時間內嘗試一下。雖然我不是專業人士,但我真的想盡可能讓事情變得簡單/香草。 –

+1

在我看來,jquery實際上使事情變得更簡單。在幕後它將處理大量的JavaScript /跨瀏覽器「陷阱」。很可能你最終會寫更少的代碼,並且你編寫的代碼將更具可讀性。只是我的2美分雖然;) –

+0

@KennethIto是絕對正確的。絕對考慮學習jQuery。它會讓你的生活變得更輕鬆! – sachleen

0

您可以修改直接被人體的innerHTML屬性:你每次修改innerHTML

var body = document.getElementsByTagName('body')[0]; 
body.innerHTML += '<h2>Speed</h2></br>'; 

http://jsfiddle.net/YB8HU/

只要記住,瀏覽器會重新處理佈局,所以考慮將將HTML字符串轉換爲變量,然後將其添加到腳本結尾的正文中。

+0

感謝您的幫助! [0]在這裏表示什麼? –

+0

這意味着「找到第一個'body'標籤」。你的HTML不應該有多個,但是因爲'getElementsByTagName'返回'NodeList'(不是一個'Node'),你必須使用它。 – bfavaretto

相關問題