Javascript While循环:生成的表行和列不一致

Javascript While循环:生成的表行和列不一致,javascript,jquery,html,loops,html-table,Javascript,Jquery,Html,Loops,Html Table,请解释为什么我从另一个问题借用的代码会产生不一致的结果。程序接受两个输入,行和列。然后,它应该生成一个表,其中包含输入的表行和表列的确切数量。但是,第一行似乎会将单元格相乘并减少每一行,直到最后一行实际呈现其他行应该呈现的内容为止 另外,我注意到,当我在内部while循环中移动第25行时,会生成一个类似于金字塔的表(这很酷),但我无法解释它在做什么 $(“”)。appendTo('table#container') 因此,请帮助我生成一个表,当输入相等时,该表将均匀地呈现行和列 注意:为行输入1

请解释为什么我从另一个问题借用的代码会产生不一致的结果。程序接受两个输入,行和列。然后,它应该生成一个表,其中包含输入的表行和表列的确切数量。但是,第一行似乎会将单元格相乘并减少每一行,直到最后一行实际呈现其他行应该呈现的内容为止

另外,我注意到,当我在内部
while
循环中移动第25行时,会生成一个类似于金字塔的表(这很酷),但我无法解释它在做什么

$(“”)。appendTo('table#container')

因此,请帮助我生成一个表,当输入相等时,该表将均匀地呈现行和列

注意:为行输入1,为列输入1确实会返回预期结果,但这是它“起作用”的唯一场景。为行输入2,为列输入2,会产生意外结果

//表生成器
var c=10//parseInt(提示(“输入列”),10);
var r=10//parseInt(提示(“输入行”),10);
var-cTmp=c;
var-rTmp=r;
函数rowLoop(){
$('tr.tableRow')。每个(函数(索引){
var trFound=$(“tr.tableRow:eq(“+index+”));
var rowNum=parseInt($(tr.tableRow:eq(“+index+”)).index()),10);
var tdAdd=“测试”;
if($(this).index()==rowNum){
trFound.append(tdAdd);
console.log(“添加TD”);
log(rowNum+“=”+$(this.index());
log(rowNum+“=”+$(this.index());
}否则{
console.log(rowNum++$(this.index());
console.log(rowNum++$(this.index());
}
});
}
而(0
表格{
边界塌陷:塌陷;
边框:实心1px#ACE;
}
tr{
高度:15px;
}
运输署{
边框:实心1px红色;
}


而不是使用
while循环
为什么不使用一个简单的嵌套
for循环
?这将使这项任务更容易阅读和理解

//表生成器
var-cols=10//parseInt(提示(“输入列”),10);
var行=10//parseInt(提示(“输入行”),10);
generateTable('container',rows,cols,'test');
函数生成器表(id、行、列、填充){
var elTable=document.getElementById(id);
创建行(表、行、列、填充);
}
函数createRows(表、行、列、填充){
对于(var row=0;row
表格{
边界塌陷:塌陷;
边框:实心1px#ACE;
}
tr{
高度:15px;
}
运输署{
边框:实心1px红色;
}


而不是使用
while循环
为什么不使用一个简单的嵌套
for循环
?这将使这项任务更容易阅读和理解

//表生成器
var-cols=10//parseInt(提示(“输入列”),10);
var行=10//parseInt(提示(“输入行”),10);
generateTable('container',rows,cols,'test');
函数生成器表(id、行、列、填充){
var elTable=document.getElementById(id);
创建行(表、行、列、填充);
}
函数createRows(表、行、列、填充){
对于(var row=0;row
表格{
边界塌陷:塌陷;
边框:实心1px#ACE;
}
tr{
高度:15px;
}
运输署{
边框:实心1px红色;
}

您的问题可能源于这样一个事实,即在每个
rowLoop()
执行中,您都将此用作迭代的选择器:

$('tr.tableRow')
这将获取DOM中当前的所有行以进行迭代,而不仅仅是您正在处理的当前行

有几个选择:

  • 首先构建一个列数为X的单行对象,然后对其进行克隆,并将Y行数追加到表中
  • 首先构建Y个空TR,然后在每个TR上迭代,并附加X个TD

您的问题可能源于这样一个事实,即在每个
rowLoop()
执行中,您都将此用作迭代的选择器:

$('tr.tableRow')
这将获取DOM中当前的所有行以进行迭代,而不仅仅是您正在处理的当前行

有几个选择:

  • 首先构建一个列数为X的单行对象,然后对其进行克隆,并将Y行数追加到表中
  • 首先构建Y个空TR,然后在每个TR上迭代,并附加X个TD
jQuery插件 您可以完全跳过循环并使用范围贴图。实际上,您可以使用以下命令定义数组:

Array.apply(null, Array(n)) // Where n is an integer greater than 0
然后可以将数组中的每个项映射到map函数中的函数或当前索引

map(function(_, idx) {
    // Return the current index in the map's "loop" callback.
    if (val == null) return idx;
    // Execute the value as a function; pass index as 1st param.
    if (isFunction(val)) return val.call(null, idx);
    // Return the value as an (assumed) scalar value.
    return val;
});
下面是一个jQuery插件,它使用上面解释的技巧生成行和列,以一次生成一个数组