0

チェックボックスで列を表示/非表示にする動的テーブルがphp/mysqlにあります。以下のコード スニペットは、合計列のセル値を非表示にして再計算する JavaScript の一部です。

function toggleVis(button) { 
// Toggle column 
cells = $$('.t'+button.name); 
cells.invoke(button.checked ? 'show' : 'hide'); 

// Recaulculate total 
$$('tr.row').each(function(row) { 
// Initialise to zero 
var total = 0; 
row.down('.total').textContent = total; 

// Sum all visible cells 
row.select('td').each(function(cell) { 
total += cell.visible() ? parseInt(cell.textContent, 10) : 0;
}); 

// Write the total in the total cell 
row.down('.total').textContent = total; 
}); 
}

これは、テーブルの内容が単純な数字の場合はうまく機能しますが、通貨の値を含む別のテーブルを作成する必要があります。これにより、NaNおそらく £ 記号が原因で合計列が返されます。これをphpで次のコードでフォーマットします。

     <tbody>
  <?php do { ?>
    <tr>
      <td><?php echo $row_rsMISource['Source']; ?></td>
      <td><?php echo "£".number_format($row_rsMISource['May'], 2, '.', ','); ?></td>
      <td><?php echo "£".number_format($row_rsMISource['Jun'], 2, '.', ','); ?></td>
      <td><?php echo "£".number_format($row_rsMISource['Jul'], 2, '.', ','); ?></td>
      <td><?php echo "£".number_format($row_rsMISource['Aug'], 2, '.', ','); ?></td>
      <td><?php echo "£".number_format($row_rsMISource['Total'], 2, '.', ','); ?></td>
      </tr>
    <?php } while ($row_rsMISource = mysql_fetch_assoc($rsMISource)); ?>
    </tbody>

これは、£10,169.62、£7,053.00、£.0.00 などの値を出力します。

上記の投稿されたjsを使用しながら、セルを通貨でフォーマットすることは可能ですか?

4

1 に答える 1

5
4 + '£4'; //NaN
4 + parseFloat('£4.3'.replace(/[^\d\.]/g, '')); //8.3

これにより、文字列から数値以外の文字が削除され、文字列が数値に変換されます (つまり8.3、 ではなくが取得されます"44.3")。

ピリオドではなくカンマが小数点記号として使用されている国に住んでいる場合は\.,

[編集 - あなたの特定の例について:]

row.find('td').each(function() { 
    total += $(this).is(':visible') ? parseFloat($(this).text().replace(/[^\d\.]/g, '')) : 0;
});

そこにはかなりの数のコード変更があります。

于 2012-07-30T11:44:37.757 に答える