リピーターにテーブルがあります。データはテーブルに入力され、ロードされるデータのタイプに応じて各行にクラスが割り当てられます。例:テーブル内の特定の範囲にjqueryイベントを適用します。
<table id="detail-table">
<tr class="typeA">
<td>Value</td>
</tr>
<tr class="typeB">
<td>Value</td>
</tr>
<tr class="typeC">
<td>Value</td>
</tr>
<tr class="typeB">
<td>Value</td>
</tr>
<tr class="typeA">
<td>Value</td>
</tr>
</table>
表は折り畳まれた表です。 typeAはヘッダー、typeBはtypeAの子、typeCはtypeBの子です。表の例では、typeAには2つの直接の子があり、最初の子にも子があります。
typeAをクリックすると、2つのtypeB行が表示され、typeBに子がある場合は、typeC行が表示されるように展開されます。私はクリックでこれを行うイベントハンドラを持っています。
特定の値を持つアイテムに対して完全な詳細展開(typeAからtypeC)を適用する必要があります。 typeAのセルの値がクエリ文字列から受け取った値と等しい場合、親とその親のすべての子に対してexpandイベントをトリガーする必要があります。私はすでにこれを行ういくつかのコードを持っています。しかし、私はそれがちょっとしたハックだと感じています。誰かに何か提案があるかどうか疑問に思っていましたか?ここまで私がこれまで持っていたことがあります。
$(function() {
var tableRows = $('#detail-table').find("tr:gt(0)");
$(tableRows).each(function(i, val) {
//ExpandValue is a value in my C# page.
if ($.trim(val.cells[0].innerText) == '<%= ExpandValue %>'){
expandRows(i);
}
}
function expandRows(startIndex) {
// Expand the first row, the typeA class
// row that matches the value
$(tableRows[startIndex]).trigger('expand');
startIndex += 1;
while($(tableRows[startIndex]).attr("class") != "typeA"){
$(tableRows[startIndex]).trigger('expand');
startIndex++;
}
}
});
これは、テーブルのすべての行を検索します。次に、テーブル行の配列をループします。条件は、各行の最初のセルのinnerTextをチェックします。セルのinnerTextがExpandValueと一致する場合、ターゲット行が見つかりました。この行のインデックスをexpandRows関数に送信します。 expandRows関数では、startIndexの行を展開します。これはExpandValueと一致するtypeAクラスの行です。次にstartIndexを1だけインクリメントして次の行をポイントします。 whileループは各行のクラスをチェックします。次のtypeA行がヒットするまで、各行のexpandイベントをトリガーします。これは正しく動作し、各行を正しく展開します。しかし、もう一度、私はjqueryの新人です、そして、私はこれをより良い方法で達成するための多分方法があると感じます。何か案は?
これは素晴らしいです。助けと余分な読書をありがとう。しかし、これは正しく動作していません。私は、$ .trim($ tableRows.eq(i).find( 'td').eq(0).text())のデバッグ時には常に空の文字列であると考えています。これは、セルテキストのブラウザの問題ですか?私は.innerTextと.textが特定のブラウザで異なっていると読んでいました。私はそれが役立つ場合は、Chromeでデバッグしています。ご協力ありがとうございました! – Tom
気にしない、私はそれを得た。値のチェックは.find( 'td')を使用します。私の最初のセルは実際にはthです。ありがとう! – Tom