使用jQuery访问表格单元格:多维数组存储时each回调未执行排查
表格转多维数组的代码错误排查与修复
我需要将表格的单元格内容存入一个多维数组,尝试编写了以下代码:
function tableManager ( table, rowitems ) { var items = array () ; var j = 0 ; var arow = array() ; $(table+' td').each(function() { arow[j] = $(this).html() ; j ++ ; if ( j == rowitems) { items.push(arow); j = 0 ; } ; }) ; this.show = function() { ............. } }构造函数调用代码如下:
$(document).ready(function(){ var loadarr = new tableManager ( '#results', 4 ) ; .... });但发现each()回调函数似乎并未执行,请问代码中存在哪些错误?
咱们来一步步拆解问题,核心是语法错误导致代码直接中断,还有几个隐性逻辑bug需要修正:
1. 数组创建用错了语法(直接导致each不执行)
你写的array()是PHP里创建数组的写法,JavaScript里根本没有这个全局函数!执行到var items = array();这一行时,浏览器会抛出ReferenceError: array is not defined的错误,后续代码(包括each循环)直接停掉了,自然不会执行。
正确的JavaScript空数组创建方式有两种,推荐用简洁的字面量写法:
var items = []; var arow = [];
2. 数组引用复用的隐性bug
就算你修复了语法错误,还会遇到一个逻辑问题:你把arow推入items后,只是重置了j,但arow还是原来的数组引用。这意味着items里的所有子数组其实都是指向同一个数组,最后所有行的内容都会变成最后一行的单元格值。
解决方法是每次推入后重新创建一个空数组:
if (j == rowitems) { items.push(arow); j = 0; arow = []; // 重新初始化数组,避免引用复用 };
3. 未处理最后一行单元格数量不足的情况
如果表格总单元格数不是rowitems的整数倍,最后剩下的几个单元格会被直接丢弃,不会进入items数组。可以在each循环结束后补个检查:
// 循环结束后,把剩余的单元格内容推入数组 if (arow.length > 0) { items.push(arow); }
修正后的完整代码
function tableManager(table, rowitems) { var items = []; var j = 0; var arow = []; // 确保选择器正确找到表格单元格 $(table + ' td').each(function() { arow[j] = $(this).html(); j++; if (j === rowitems) { items.push(arow); j = 0; arow = []; } }); // 处理最后一行的剩余单元格 if (arow.length > 0) { items.push(arow); } this.show = function() { // 示例:打印结果到控制台 console.log('转换后的多维数组:', items); } } // 调用代码 $(document).ready(function(){ var loadarr = new tableManager('#results', 4); loadarr.show(); // 测试查看转换结果 });
内容的提问来源于stack exchange,提问作者eluc
相关产品推荐
相关产品推荐

