0

假设我有一个 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
}
4

3 回答 3

5

如果总是有一个标题行,那么行数将是tr表中的元素数-1,例如。

var rowCount = $("#myTable tr").length -1;

这使您不必使用一些复杂的属性选择器或字符串解析方法。

于 2012-11-01T11:33:18.217 回答
4

这种方法应该适合你:

var rowCount = $("#data-table tr").filter(function() {
    return $(this).find('[name^="v"]').length;
}).length;

此代码将仅计算名称以 开头的输入的所有行v。我想这就是你需要的。

快速演示:http: //jsfiddle.net/dfsq/2P5cN/

UPD 根据 Mark Reed 的评论,我们可以让它更简单:

var rowCount = $('#data-table tr').has('[name^=v]').length;
于 2012-11-01T11:46:53.563 回答
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 无关元素。

http://jsfiddle.net/usDD7/1/

编辑显然我没有考虑使用 jQuery。请参阅 dfsq 的答案以获得更好的解决方案(以及我对该答案的评论以获得微小的改进)。

于 2012-11-01T11:46:26.010 回答