通过javascript中的表函数循环

时间:2018-05-04 02:48:33

标签: javascript jquery

我有一个基于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循环运行时无法找到未定义的'length'。

有没有更好的方法来实现这个功能?我需要循环使用大约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);
}

2 个答案:

答案 0 :(得分:1)

.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);
}

答案 1 :(得分:0)

我无法评论,但似乎你传递的函数是一个字符串,如“table1”,但这不是jQuery选择器。您正在使用ID,因此选择器应为“#tabel1”。