Javascript Java脚本在无限循环中获取文档对象
我正在编写一个代码来添加一个div,这取决于单击按钮时在文档中找到的一组“object” 当Document.getElementsByTagName('object'); 只有一个对象,但它进入无限循环!告诉我swf.length的增量值在警报中无限增加1。 你能帮帮我吗?我怎么了Javascript Java脚本在无限循环中获取文档对象,javascript,javascript-objects,Javascript,Javascript Objects,我正在编写一个代码来添加一个div,这取决于单击按钮时在文档中找到的一组“object” 当Document.getElementsByTagName('object'); 只有一个对象,但它进入无限循环!告诉我swf.length的增量值在警报中无限增加1。 你能帮帮我吗?我怎么了 <script> function get2(){ var swf = document.getElementsByTagName('object'); for (j=0;j<s
<script>
function get2(){
var swf = document.getElementsByTagName('object');
for (j=0;j<swf.length ;j++ )
{
alert(swf.length);
var objs = swf[j].getElementsByTagName('param');
for(i=0;i<objs.length;i++){
id = objs[i].getAttribute('name');
if (id == 'src'){
source = objs[i].getAttribute('value')
dv = document.createElement('div');
dv.setAttribute('id','myContent');
dv.setAttribute('border','2');
document.getElementsByTagName('body')[0].appendChild(dv);
/* code to embed a new swf object in new Div*/
}/*if*/
}/*for*/
}/*outer for*/
}/*function*/
函数get2(){
var swf=document.getElementsByTagName('object');
对于(j=0;j这里有两件事让我怀疑
- 我唯一觉得可疑的是下面这句话:
document.getElementsByTagName('body')[0].appendChild(dv);
您在这里修改DOM。您在这里修改的元素是什么
- 外环的结构:
for (j=0; j<swf.length; j++) { ... }
(j=0;j这里有两件事让我怀疑
- 我唯一觉得可疑的是下面这句话:
document.getElementsByTagName('body')[0].appendChild(dv);
您在这里修改DOM。您在这里修改的元素是什么
- 外环的结构:
for (j=0; j<swf.length; j++) { ... }
for(j=0;j在内部for循环中放置一个断点,并检查j、i和getElementsByTagName('object')的值。length以及swf[j]。getElementsByTagName('param')。第一次迭代后的长度并发布结果。尝试在循环外获取长度(这是一个很好的实践)。在循环中也使用var关键字:
var objectLength = swf.length;
for (var j = 0; j < objectLength; j++)
{
...
}
var objectLength=swf.length;
对于(var j=0;j
您没有在div中添加更多的object标记,只是忽略了代码You?在内部for循环中放置一个断点,并检查j、i和getElementsByTagName('object')。length以及swf[j]。getElementsByTagName('param')的值.length在第一次迭代后发布结果。尝试在循环外获取长度(这是一个很好的做法)。在循环中也使用var关键字:
var objectLength = swf.length;
for (var j = 0; j < objectLength; j++)
{
...
}
var objectLength=swf.length;
对于(var j=0;j
您没有在div中添加更多的object标记,只是忽略了代码You?我认为问题在于您正在循环从getElementsByTagName('object')返回的动态数组的长度
然后在该循环中添加一个新的对象标记,该标记将增加数组,从而导致循环再次扩展,这将添加另一个对象,从而再次扩展循环-永远。您可以通过不在.length上循环,而是通过获取初始数组的长度并仅在该数组上循环来修复此问题。以下是其他精简方法我建议你也修一下
- 使用局部变量,而不是全局变量
- 当您使用getElementsByTagName时,它们会返回动态数组,这些数组的长度可以随着您的操作而变化。在初始长度上循环更安全,因此不会有无限的循环风险
- 您可以使用
document.body
而不是document.getElementsByTagName('body')[0]
- 缺少一些分号
下面是固定代码,其中包含这些固定/保护
function get2(){
var swf = document.getElementsByTagName('object');
for (var j = 0, len = swf.length; j < len ; j++ )
{
var objs = swf[j].getElementsByTagName('param');
for(var i=0, oLen = objs.length; i < oLen; i++){
var id = objs[i].getAttribute('name');
if (id == 'src'){
var source = objs[i].getAttribute('value');
var dv = document.createElement('div');
dv.setAttribute('id','myContent');
dv.setAttribute('border','2');
document.body.appendChild(dv);
/* code to embed a new swf object in new Div*/
}/*if*/
}/*for*/
}/*outer for*/
}/*function*/
函数get2(){
var swf=document.getElementsByTagName('object');
对于(var j=0,len=swf.length;j
在使用这些动态数组时,我总是将数组的长度预取到一个局部变量中,并在该变量上循环,以避免出现这种情况。我认为问题在于,您在循环从getElementsByTagName('object')返回的动态数组的长度
然后在该循环中添加一个新的对象标记,该标记将增加数组,从而导致循环再次扩展,这将添加另一个对象,从而再次扩展循环-永远。您可以通过不在.length上循环,而是通过获取初始数组的长度并仅在该数组上循环来修复此问题。以下是其他精简方法我建议你也修一下
- 使用局部变量,而不是全局变量
- 当您使用getElementsByTagName时,它们会返回动态数组,这些数组的长度可以随着您的操作而变化。在初始长度上循环更安全,因此不会有无限的循环风险
- 您可以使用
document.body
而不是document.getElementsByTagName('body')[0]
- 缺少一些分号
下面是固定代码,其中包含这些固定/保护
function get2(){
var swf = document.getElementsByTagName('object');
for (var j = 0, len = swf.length; j < len ; j++ )
{
var objs = swf[j].getElementsByTagName('param');
for(var i=0, oLen = objs.length; i < oLen; i++){
var id = objs[i].getAttribute('name');
if (id == 'src'){
var source = objs[i].getAttribute('value');
var dv = document.createElement('div');
dv.setAttribute('id','myContent');
dv.setAttribute('border','2');
document.body.appendChild(dv);
/* code to embed a new swf object in new Div*/
}/*if*/
}/*for*/
}/*outer for*/
}/*function*/
函数get2(){
var swf=document.getElementsByTagName('object');
对于(var j=0,len=swf.length;j
当使用这些动态数组时,我总是将数组的长度预取到一个局部变量中,并在该变量上循环,以避免出现这种情况。这里的变量id、I和j都是全局变量。你可能不希望这样。我试着使I和j成为全局变量