我有一个基于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);
}
答案 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”。