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 に答える