columnTableCharAlign

by samizdam

HTML

<table class="zebra benedict-FLC"><caption>Ток номинальной нагрузки двигателя (ТНН) и минимальный номинала «медленного» ("gL") предохранителя от K3</caption>
<thead>
<tr>
    <th colspan="2" class="">Мощность двигателя</th>
    <th colspan="3" class="">Диапазон согласно BS для 415V</th>
    <th>Двигатель 220-230V</th>
    <th colspan="2">Номинал предохран. при пуске </th>
    <th class="">Двигатель 380-400V</th>
    <th colspan="2">Номинал предохран. при пуске </th>
    <th>Двигатель 500V</th>
    <th colspan="2">Номинал предохран. при пуске </th>
    <th>Двигатель 660-690V</th>
    <th colspan="2">Номинал предохран. при пуске </th>
</tr>
<tr>
    <th class="">kW</th>
    <th class="">PS~hp</th>
    <th class="">hp</th>
    <th>cos(phi)</th>
    <th>%</th>
    <th>ТНН <br>(А)</th>
    <th>D.O.L. <br>(A)</th>
    <th>YD <br>(A)</th>
    <th class="">ТНН <br>(А)</th>
    <th>D.O.L. <br>(A)</th>
    <th>YD <br>(A)</th>
    <th>ТНН <br>(А)</th>
    <th>D.O.L. <br>(A)</th>
    <th>YD <br>(A)</th>
    <th>ТНН <br>(А)</th>
    <th>D.O.L. <br>(A)</th>
    <th>YD <br>(A)</th>
</tr>
</thead>
<tfoot>
<tr>
    <th>kW</th>
    <th>PS~hp</th>
    <th>hp</th>
    <th>cos(phi)</th>
    <th>%</th>
    <th>ТНН <br>(А)</th>
    <th>D.O.L. <br>(A)</th>
    <th>YD <br>(A)</th>
    <th>ТНН <br>(А)</th>
    <th>D.O.L. <br>(A)</th>
    <th>YD <br>(A)</th>
    <th>ТНН <br>(А)</th>
    <th>D.O.L. <br>(A)</th>
    <th>YD <br>(A)</th>
    <th>ТНН <br>(А)</th>
    <th>D.O.L. <br>(A)</th>
    <th>YD <br>(A)</th>
</tr>
<tr>
    <th colspan="2">Мощность двигателя</th>
    <th colspan="3">Диапазон согласно BS для 415V</th>
    <th>Двигатель 220-230V</th>
    <th colspan="2">Номинал предохран. при пуске </th>
    <th>Двигатель 380-400V</th>
    <th colspan="2">Номинал предохран. при пуске </th>
    <th>Двигатель 500V</th>
    <th colspan="2">Номинал предохран. при пуске </th>
    <th>Двигатель 660-690V</th>
    <th colspan="2">Номинал предохран. при пуске </th>
</tr>
</tfoot>
<tbody>
<tr>
    <td...

CSS

table.benedict-FLC td{
    padding: 5px;
    text-align: left;
    font-family: monospace;
    border: 1px black solid;
    vertical-align: middle;
}

JavaScript

/**
*    columnTableCharAlign
*    @author [email protected]
*    @since 10.12.2012
*    @ver 1.2.12
*/

(function($){
  jQuery.fn.columnTableCharAlign = function(options){
    options = $.extend({
        cols: 'n1+1', // номер колонки, допустимо выражение для :nth-child(), по умолчанию все
        use_char: ',', // символ для выравнивания
        left_offset: 3, // кол-во пробелов добиваемых слева (минимум — кол-во знаков целой части в наибольшем значении)
        right_offset: 2, // кол-во знаков в дробной части по умолчанию
        exclude_cells : 3 // TODO! номера ячеек для которых не проволить преобразование (напр. с текстом и т.п.) :nth-of-type() совместимое выражение
    }, options);
 
    var make = function(){
        $(this).css('font-family', 'monospace');
        $(this).css('text-align', 'left');
        var tds = $(this).find('tbody tr td:nth-child('+options.cols+')');
       //:not(:nth-of-type('+options.exclude_cells+'))');
       // alert(tds.size());
        //tds = tds.filter(':not(:nth-of-type('+options.exclude_cells+'))');
        //alert(tds.size());          
        tds.each(function(i){
            var character = options.use_char;
            var num_value = $(this).text();
            var new_value = "";
            var fraction = num_value.split(character);
            var integer = fraction[0];
            var fractional = fraction[1];
            // может быть такое, что в ячейке оказалось целое число, без запятой
            // место под неё заменим на пробел
            if(fractional == undefined){
                fractional = '';
                character = '&nbsp;';
            }
            // вычисляем отбивку слева
            var difference_integer = options.left_offset - integer.length;
            if(difference_integer > 0){
                new_value += new Array(difference_integer + 1).join('&nbsp;');
            }
            // склеиваем всё вместе
            new_value += integer+character+fractional;
            //...