假设我有一个20行的表单,如下图所示:
我将每行中的元素命名为:
1st row (Ambiance) -> v1[requirement], v1[observation], v1[status], v1[remarks]
2nd row (TV Room) -> v2[requirement], v2[observation], v2[status], v2[remarks]
3rd row (Cleanliness) -> v3[requirement], v3[observation], v3[status], v3[remarks]
.... and so on till 20th row
使用jquery或javascript我可以根据元素的名称找到存在的行数吗?即,在此表格中,名称从v1开始,到v20结束。所以有20行。
更新
我想要行数的原因是因为我计划使用以下方式处理表单:
for($i=1; $i<=$rowcount; $i++)
{
$v.$i = $_POST['v'.$i];
// then insert the first row into table and so on
}
答案 0 :(得分:5)
如果总是有一个标题行,那么行数将是表-1中的tr
个元素的数量,例如。
var rowCount = $("#myTable tr").length -1;
这可以节省您使用一些复杂的属性选择器或字符串解析方法。
答案 1 :(得分:4)
这种方法对您有用:
var rowCount = $("#data-table tr").filter(function() {
return $(this).find('[name^="v"]').length;
}).length;
此代码仅计算具有名称以v
开头的输入的行。我想这就是你需要的。
快速演示:http://jsfiddle.net/dfsq/2P5cN/
<强> UPD 强> 根据马克里德的评论,我们可以使它更简单:
var rowCount = $('#data-table tr').has('[name^=v]').length;
答案 2 :(得分:2)
如果你根本无法修改标记,那么你几乎必须遍历所有内容并进行自己的计算。像这样:
var tds = document.getElementsByTagName('td'); // or just $('td') for jQuery
var count_tds = tds.length;
var max = 0;
for (var i=0; i<count_tds; ++i) {
var td = tds[i]
var m = td.id.match(/^v(\d+)\[/)
if (m) {
if (m[1] > max) max=m[1]
}
}
现在max
是行数,假设没有与ID匹配的无关元素。
编辑显然我没有想到jQuery。请参阅dfsq的答案以获得更好的解决方案(以及我对该答案的评论,以获得微小的改进)。