Javascript for循环应该循环两次,为什么只有一次?
我有一个最奇怪的问题,我下面有一个循环,应该循环两次(它应该循环与HTML块中的textarea元素数量相同,所以2)但是它只循环一次 你认为这是为什么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
// 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