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 = ' ';
}
// вычисляем отбивку слева
var difference_integer = options.left_offset - integer.length;
if(difference_integer > 0){
new_value += new Array(difference_integer + 1).join(' ');
}
// склеиваем всё вместе
new_value += integer+character+fractional;
//...