循环的Javascript应该循环两次,为什么只循环一次

Javascript for loop should loop twice, why only once?

本文关键字:循环 为什么 一次 两次 Javascript      更新时间:2023-09-26

我有一个最奇怪的问题,我下面有一个循环,应该循环两次(它的循环量应该与HTML块中的文本区域元素相同,所以2)只循环一次?

你认为为什么会发生这种事?

  // This is the test HTML that should make the loop further below loop twice
  <div class="inputPanel">  
     <div class="a"> 
     <p class="label">Staff Link</p> 
     <textarea class="updatable~p"> abcdef </textarea>    
     <p> blah blah </p>
     <div class="b"> defgh </div>
     <p class="label">Staff Info</p>
     <textarea class="updatable~p"> erdeffde </textarea>
     <div class="footer"> end </div>
  </div>

function convertToDisplayHTML( str )
{
    try
    {
                       // Algorithm:
        // get all code from iframe 
        // extract all textarea elements
        // if textarea[i].class.match( "updable" )
        /* {
              var eleType = textarea[i].class.split("~");
              eleType     = eleType[ eleType.length-1 ];
              change elements type to eleType
              change elements value to textareas value
           }
           delete all elements that are <p>'s & have the class="label"
           return string
        */
        var textareas = document.getElementById("inputPanel").getElementsByTagName("textarea");
        var labels    = getElementsByClassName( "label", document.getElementById("inputPanel") );
        alert(textareas.length);  // says "2"
                       // THIS IS THE LOOP: it should loop 2 times not 1
        for ( var i=0; i<textareas.length; i++ )
        {
            alert("Loop 1 " + textareas[i].className);
            if ( textareas[i].className.match( "updatable" ) )
            {
                var className = "";
                var eleType   = textareas[i].className.split( "~" );
                eleType       = eleType[ eleType.length-1 ];
                if ( labels.length > 0 )
                {
                    var className = "updater~"+labels[0].innerHTML;
                    labels[0].parentNode.removeChild( labels[0] );
                    labels.shift();
                }
                var newObj  = changeObjectType( textareas[i], eleType, className );
            }
            alert("A");
        }
        return document.getElementById("inputPanel").innerHTML;
    }
    catch (ex)
    {
        alert("In convertToDisplayHTML(): "+ex);
        return "FAILED";
    }
}

labels没有名为shift的函数。

这就是我犯错误的地方。对此进行注释(以及您尚未定义的对changeObjectType的调用)为我解决了问题。