Javascript Java脚本在无限循环中获取文档对象

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

我正在编写一个代码来添加一个div,这取决于单击按钮时在文档中找到的一组“object”

当Document.getElementsByTagName('object'); 只有一个对象,但它进入无限循环!告诉我swf.length的增量值在警报中无限增加1。 你能帮帮我吗?我怎么了

<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成为全局变量