2010-04-28 46 views
4

我想要做的是:一个不断更新内容的网页。 (在我的情况下是每2秒更新一次)新内容被附加到旧的内容而不是覆盖。附加到JavaScript中的网页

这里是我的代码:

var msg_list = new Array(
    "<message>Hello, Clare</message>", "<message>Hello,Lily</message>", 
    "<message>Hello, Kevin</message>", "<message>Hello, Bill</message>" 
); 
var number = 0; 
function send_msg() 
{ 
document.write(number + " " + msg_list[number%4]+'<br/>'); 
number = number + 1; 
} 
var my_interval = setInterval('send_msg()', 2000); 

然而,在IE和Firefox,只有一条线被打印出来,并在页面将不再更新。有趣的是,在Chrome浏览器中,这些线路正在不断打印出来,这正是我所需要的。

我知道document.write()是根据this link加载页面时调用的。所以绝对不是连续更新网页的方式。什么是实现我想要做的最好的方式?

完全新手在Javascript。谢谢。

百合

回答

1

您可以附加到innerHTML属性:

var number = 0; 
function send_msg() 
{ 
    document.getElementById('console').innerHTML += (number + " " + msg_list[number%4]+'<br/>'); 
    number = number + 1; 
} 

此代码将消息追加到元素与console的ID,如

<div id="console"></div> 

顺便说一句,这是不好的练习用字符串调用setInterval

相反,传递函数本身,就像这样:

var my_interval = setInterval(send_msg, 2000); 
+1

额外'()'在那里的间隔呼叫:) – 2010-04-28 22:55:29

+0

固定;谢谢.. – SLaks 2010-04-29 00:01:49

+0

另外值得指出的是'新的数组('a','b','c')'是定义数组的n00b方法 - var msg_list = ['a','b', 'c'];'很整洁。 :-) – 2010-04-29 00:15:52

1

我会通过看jQuery库开始。这会为你节省很多痛苦。

你想要做的就是保持插入行到一个表,使用如:

$('table tbody').append('<tr><td>some value</td></tr>'); 
+1

他提到他是javascript中的总noob。最好让他只用nilla javascript学习它,然后学习如何在jQuery中完成它。 – Bob 2010-04-28 22:47:04

+1

我不同意。如果你不需要,为什么要经历所有的痛苦。它就像在学习之前所说的那样学习汇编语言。 – 2010-04-28 22:48:45

+0

我不同意。这就像在学习Java之前说学汇编。 – Daniel 2010-04-29 00:16:30

1

我想有一个股利或其它容器,就这样:

<div id="msgDiv"></div> 

然后写它像使用.innerHTML,像这样:

var msg_list = new Array(
    "<message>Hello, Clare</message>", "<message>Hello,Lily</message>", 
    "<message>Hello, Kevin</message>", "<message>Hello, Bill</message>" 
); 
var number = 0; 
function send_msg() 
{ 
    document.getElementById("msgDiv").innerHTML += number + " " + msg_list[number%4]+'<br/>'; 
    number++; 
} 
var my_interval = setInterval(send_msg, 2000); 

You can see a working example of this here

+0

@尼克,我以前想过你的解决方案,但是只有一行会显示,而新的会覆盖旧的。我想要做的就是打印出所有可用的行〜 – Lily 2010-04-28 22:42:45

+1

@Lily - 情况并非如此...尝试一下这个例子,你使用'+ ='而不是'='并且它会追加。 – 2010-04-28 22:51:45

+0

你是对的!当我第一次看到你的解决方案时,我错过了+ =。对不起,我的粗心! ;-) – Lily 2010-04-29 03:31:00

1

这将是一个很好的机会让你了解一点DOM编程。

使用DOM来更新页面应该比简单地将更多的HTML连接到它更少的开销。找到要将更新放入的节点,并在每次后续添加时执行appendChild。