2016-12-14 11 views
1

data-tipoの各<th>のテーブルをチェックするjQueryコードがあり、その内容に応じてその列の各<td>に特定の値が設定されます。 example for better understandingを参照してください。より多くを選択することができません一致jQuery

JS:それはdata-tipo='string'ヘッダ正しいdata-value、および任意data-tipo='number'と同じでカラムからすべての<td>上に配置し、正常に動作するが、前記のように、それは最初の行のみに行い

var tabla = $('table'); 

    tabla.find('tr th').each(function(i) { 

    var tipo = $(this).data('tipo'); 

    if (tipo === 'string') { 
     var celda = tabla.find('tr td').eq(i); 
     celda.attr('data-valor', celda.text()); 
    } 
    if (tipo === 'number') { 
     var celda = tabla.find('tr td').eq(i); 
     var numSaneado = celda.text().replace('.', '').replace(',', '.').replace(/[^0-9.]/g, ""); 
     celda.attr('data-valor', numSaneado); 
    } 
    }); 

。すべての行で、この作品を作るための方法

IMAGE

+0

代わりに 'table.find( 'tr')。find( 'td').eq(i)'を使ってみてください。もし可能であれば '( 'tr td')スタイルセレクタを使わないでください。非常に非効率です。それがうまくいかない場合は、 '.find( 'tr')。each(....)'を実行してループ内のtdsを取得してください。 – nurdyguy

+0

@nurdyguy:_ "もし可能であれば、( 'tr td')スタイルセレクタを使用しないでください。非常に効率が悪いですが、ほとんどの場合は無関係です。 – CBroe

+3

'eq(i)'は単一の要素を返します。あなたが 'table.find( 'tr')をしたいと思うように聞こえます。それぞれ(function(tr){var celda = $(tr).find( 'td')eq(i); ...' –

答えて

1

セレクタ"tr td"を使用すると、行とそのセルの選択が結合されます。したがって、tabla.find('tr td').eq(i);を実行すると、行とセルの組み合わせが「i番目」になります。

代わりに、各行にi番目のセルがあります。これを行うには、すべての行を選択し、それぞれの行に正しいセルを見つけます。行を反復

table.find('tr').each(function (tr) { 
    var celda = $(tr).find('td').eq(i); 
    // the rest of your code 
}); 

、行内の各i番目のセルを見つける:ここでそれを行う一つの方法です。

関連する問題