我制作了一个数组,用于遍历表(最初隐藏)并根据请求的部分显示某些行:
var rows_per_section = [ {min: 0, max: 7}, {min: 7, max: 17}, {min: 17, max: 21}, {min: 21, max: 35}, {min: 35, max: 41}, {min: 41, max: 46}, {min: 46, max: 52},{min: 52, max: 56} ];
var rows_min = rows_per_section[section_no].min;
var rows_max = rows_per_section[section_no].max;
我现在正在尝试使用额外的函数来更改脚本,该函数循环遍历表并自行创建rows_per_section数组,因为表的长度可以变化。我可以通过查找类标记来检测表中的中断,但我无法弄清楚如何创建数组并在每次中断时添加新值:
function create_section_array(profile_table, no_of_sections) {
var section_counter = 0;
var rows_per_section = new Array(); //this is where it starts to go wrong
//need to create the array and stick in the
//MIN value for the first section as 0
for (i=0;i<profile_table.length-1;i++) {
var table_row = profile_table.item(i);
var row_content = table_row.getElementsByTagName("td");
if(row_content[0].className == "ProfileFormTitle") {
if(section_counter != 0) {
//if not the first section add a MAX value to
//rows_per_section[section_counter + 1]
}
if(section_counter != no_of_sections) {
//if not the last section add a MIN value to
//rows_per_section[section_counter]
}
section_counter++;
}
}
return rows_per_section;
}
答案 0 :(得分:0)
我会修改你的函数看起来像这样:
function create_section_array (profile_table, no_of_sections) {
var section_counter = 0,
rows_per_section = [ { min: 0 } ],
precedingLength = 0,
i, row_content;
for (i = 0; i < profile_table.length; i += 1) {
row_content = profile_table[i].getElementsByTagName('td');
if (row_content[0].className === 'ProfileFormTitle') {
if (section_counter !== 0) {
rows_per_section[section_counter] = {
max: row_content.length - 1
};
}
if (section_counter !== no_of_sections) {
rows_per_section[section_counter].min = precedingLength;
}
section_counter += 1;
precedingLength += row_content.length;
}
}
return rows_per_section;
}
关于上述内容的几点说明:
i
最初未明确声明,这意味着它存在于全球范围内。我已经添加了声明。
JavaScript中没有块范围,只有函数范围(vars are hoisted)。我已将row_content
的声明移到函数的顶部,因为这是一种流行的习惯风格。
运营商==
和!=
perform type coercion。坚持===
和!==
通常更安全。
您可以使用文字语法声明数组,不需要new Array()
。在您的情况下,我们使用[ { min: 0 } ]
初始化来设置基本的必需结构,但更常见的是,您会看到人们使用空数组[]
进行初始化。
同样,在数组中设置新索引的值时,我们可以使用文字对象语法作为基本所需结构。在您的情况下,这是{ max: row_content.length - 1 }
。
从技术上讲,这不是一个多维数组,它是一个对象数组(或字典,地图,键/值存储,无论你想调用它们)。
我实际上没有运行上述内容,只是对您的问题的背景有一种模糊的感觉。这段代码可能存在(可能是?)问题! :)