首页 > 解决方案 > 在javascript中循环遍历表函数

问题描述

我有一个基于 Symfony 框架的应用程序,页面是用 HTML 构建的,我有多个表,每行都有不同的行长度,我需要遍历所有数据。

我的桌子有这种形式:

<form onsubmit="runScript()">
<div id="{{ tblName }} ">
<table>
 <thead>
  <tr>
   <th>col1Name</th>
   <th>col2Name</th>
  </tr>
 </thead>
 <tbody>
  <tr>
   <td><input type=text /></td>
   <td><input type=date /></td>
  </tr>
 </tbody>
</table>
<button type="submit></button>
</div>
</form>

runScript() 函数获取表名并将其发送到我制作的 javascript 函数中,用于旋转单元格并将它们推送到数组中:

function getTableData(tblName){
    let div = $(tblName);

    let table = $(div).find("tbody");



    let tableData = [];


    let rowlength = table.rows.length;


    for(let i=0; i<rowlength; i+=1){
        let row = table.rows[i];

        let cellLength = row.cells.length;

        for(let y=0; y<cellLength; y+=1){
            let cell = row.cells[y];

            tableData.push(cell);
        }
    }
    alert(tableData);
}

**更新问题:运行 for 循环时,我不断收到找不到未定义的“长度”的错误。

有没有更好的方法来实现这个功能?我需要循环遍历大约 19 个表,因此我宁愿不必为每个表单单独创建一个表。

谢谢!

谢谢@fejanto,我让它工作了,这是更新的javascript:

function getTableData(tblName){
    let div = $(tblName);

    // By doing '[0]' on a jQuery object you get the wrapped HTML element
    let table = $(div).find("tbody")[0];

    console.log(table);

    let tableData = [];

    let rowlength = table.rows.length;

    for(let i=0; i<rowlength; i+=1){
        let row = table.rows[i];

        let cellLength = row.cells.length;

        for(let y=0; y<cellLength; y+=1){
            let cell = row.cells[y];

            tableData.push(cell);
        }
    }
    console.log(tableData);
}

和 runScript() 函数:

function runScript(){
    let name = $('#tablename').val();

    alert(name);

    getTableData(name);
}

标签: javascriptjquery

解决方案


.innerHTML不应该在那里,您需要 HTML 集合对象,而不是 html 或 jQuery 对象。这就是为什么您需要从 jQuery 对象中提取 html 集合的原因。另外,也许您应该使用console.log而不是alert检查变量的内容,因为alert不会对对象进行字符串化。

function getTableData(tblName){
    let div = $(tblName);

    // By doing '[0]' on a jQuery object you get the wrapped HTML element
    let table = $(div).find("tbody")[0];

    console.log(table);

    let tableData = [];

    let rowlength = table.rows.length;

    for(let i=0; i<rowlength; i+=1){
        let row = table.rows[i];

        let cellLength = row.cells.length;

        for(let y=0; y<cellLength; y+=1){
            let cell = row.cells[y];

            tableData.push(cell);
        }
    }
    console.log(tableData);
}

推荐阅读