Javascript:多次使用document.getElementById(id).appendChild()?
在以下代码中使用Javascript:多次使用document.getElementById(id).appendChild()?,javascript,document,appendchild,Javascript,Document,Appendchild,在以下代码中使用document.getElementById(id).appendChild(img)是否会导致浏览器出现问题?我想知道在文档的生命周期内是否使用appendChild()多次更新图像可能会造成内存问题,或者只会创建一个节点? 我知道下面的代码只加载一次图像,但我正计划扩展代码,将图像随机更改为动画。这份文件将表明需要采取行动 document.getElementById(id).appendChild(img)在文档生命周期内多次出现 <!DOCTYPE html P
document.getElementById(id).appendChild(img)
是否会导致浏览器出现问题?我想知道在文档的生命周期内是否使用appendChild()多次更新图像可能会造成内存问题,或者只会创建一个节点?
我知道下面的代码只加载一次图像,但我正计划扩展代码,将图像随机更改为动画。这份文件将表明需要采取行动
document.getElementById(id).appendChild(img)
在文档生命周期内多次出现
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Untitled Document</title>
<script type="text/javascript">
var img = document.createElement("IMG");
images = new Array();
function random_image(id)
{
var i = 0;
for(i = 0; i < 7; i++)
{
images[i] = "image" + i + ".jpg"
}
var random = (Math.floor(Math.random()*7));
img.src = images[random];
document.getElementById(id).appendChild(img);
}
</script>
</head>
<body onload = "random_image('image')">
<div id="image"></div>
</body>
</html>
无标题文件
var img=document.createElement(“img”);
images=新数组();
函数随机图像(id)
{
var i=0;
对于(i=0;i<7;i++)
{
图像[i]=“图像”+i+“.jpg”
}
var random=(Math.floor(Math.random()*7));
img.src=图像[随机];
document.getElementById(id).appendChild(img);
}
如果你把它作为一个动画来做,你最好只改变图像标签的src和相应的图像url,而不是替换图像标签本身
*根据第一条评论进行编辑*
您已经有了所需的代码,但您所做的是每次都将图像重新附加到文档中。我的建议是改变你已经得到的图像的src
var img = document.createElement("IMG");
images = new Array();
var i = 0;
for(i = 0; i < 7; i++){
images[i] = "image" + i + ".jpg"
}
function onLoad(){
random_image('image');
document.getElementById(id).appendChild(img);
}
function random_image(id){
var random = (Math.floor(Math.random()*7));
img.src = images[random];
}
window.onload = onLoad;
var img=document.createElement(“img”);
images=新数组();
var i=0;
对于(i=0;i<7;i++){
图像[i]=“图像”+i+“.jpg”
}
函数onLoad(){
随机图像(“图像”);
document.getElementById(id).appendChild(img);
}
函数随机图像(id){
var random=(Math.floor(Math.random()*7));
img.src=图像[随机];
}
window.onload=onload;
请注意,我在某种程度上假设,调用该函数的不仅仅是文档加载evnet。如果是的话,那么你的问题就是毫无意义的b/c你问的是关于频繁称呼它的影响。按照我所展示的方式,首先从文档中取出代码(这是一件好事),并使任何调用代码都可以替换由该图像标记生成的图像文件。如果使用removeChild从#image div中删除图像,则不会。当您从文档中删除图像时,垃圾回收将快速释放内存。因此,只要不将图像隐藏在DOM中的某个地方,就没有什么可担心的
更好的办法是更改现有img标记的来源,这样可以在不创建或破坏新元素的情况下替换图像。如果只执行一次,则可以
如果多次添加,会添加许多图像您知道,每次添加内容都会添加另一个元素,而不是替换现有元素吗?是的,这就是我问这个问题的原因,因为我不太确定如果在同一文档中多次使用appendchild()会发生什么。“一个更好的办法是更改现有img标记的源代码”我该如何编写,你能给出一个示例吗?谢谢。请检查这里的代码:。当你单击图像时,它会使用getDocumentById获取图像,然后使用.src=“下一个图像的url”更改图像的src“。你可以想做多少次就做多少次。不,不会的;他当前的代码没有创建新的图像元素,只是重新添加了他已经创建的图像元素。每次他这样做时,它都会将它移动到他正在创建的节点的末尾。如果他在后续调用中更改函数的输入字符串,则可能会将相同的图像标记移动到不同的位置。