Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript for循环应该循环两次,为什么只有一次?_Javascript_Html_Css_Debugging - Fatal编程技术网

Javascript for循环应该循环两次,为什么只有一次?

Javascript for循环应该循环两次,为什么只有一次?,javascript,html,css,debugging,Javascript,Html,Css,Debugging,我有一个最奇怪的问题,我下面有一个循环,应该循环两次(它应该循环与HTML块中的textarea元素数量相同,所以2)但是它只循环一次 你认为这是为什么 // This is the test HTML that should make the loop further below loop twice <div class="inputPanel"> <div class="a"> <p class="label">Staf

我有一个最奇怪的问题,我下面有一个循环,应该循环两次(它应该循环与HTML块中的textarea元素数量相同,所以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";
    }
}
//这是一个测试HTML,它应该使循环在循环下面两次
员工链接
abcdef
废话

德夫 员工信息

埃尔德夫德 结束 函数convertToDisplayHTML(str) { 尝试 { //算法: //从iframe获取所有代码 //提取所有textarea元素 //如果text区域[i].class.match(“可升级”) /* { var eleType=textarea[i].class.split(“~”); eleType=eleType[eleType.length-1]; 将图元类型更改为eleType 将元素值更改为textareas值 } 删除所有具有class=“label”的元素 返回字符串 */ var textareas=document.getElementById(“inputPanel”).getElementsByTagName(“textarea”); var labels=getElementsByClassName(“label”,document.getElementById(“inputPanel”); 警报(textareas.length);//表示“2” //这就是循环:它应该循环2次而不是1次 对于(变量i=0;i 0) { var className=“updater~”+标签[0]。innerHTML; 标签[0].parentNode.removeChild(标签[0]); labels.shift(); } var newObj=changeObjectType(textareas[i],eleType,className); } 警报(“A”); } return document.getElementById(“inputPanel”).innerHTML; } 捕获(ex) { 警报(“在convertToDisplayHTML():”+ex中); 返回“失败”; } }
标签
没有名为
shift
的功能


这就是我出错的地方。注释掉它(以及调用您尚未定义的
changeObjectType
,为我解决了这个问题。

您是否尝试过警告
textaries.length
?调试应该不太困难。可能是一个退出条件启动了?他警告过它--alert(textaries.length);//说“2”首先,类名称中不允许使用
~
字符。顺便说一句,getElementById(“inputPanel”)?您的inputPanel div有一个类,而不是id