使用jQuery或javascript计算具有不同名称的元素数量

时间:2012-11-01 11:30:03

标签: javascript jquery

假设我有一个20行的表单,如下图所示: Form Structure

我将每行中的元素命名为:

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
}

3 个答案:

答案 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匹配的无关元素。

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

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