Я согласился на ограничение (для некоторых людей преимуществом) того, что мои строки имеют только одну строку текста. CSS, содержащий длинные строки, становится:
.datatable td {
overflow: hidden; /* this is what fixes the expansion */
text-overflow: ellipsis; /* not supported in all browsers, but I accepted the tradeoff */
white-space: nowrap;
}
[править, чтобы добавить:] После использования собственного кода и первоначального сбоя я понял второе требование, которое может помочь людям. Сама таблица должна иметь фиксированную компоновку, иначе ячейки будут просто пытаться расширяться, чтобы вместить содержимое, несмотря ни на что. Если стили DataTables или ваши собственные стили еще не сделали этого, вам нужно установить их:
table.someTableClass {
table-layout: fixed
}
Теперь, когда текст обрезан с помощью эллипсов, чтобы фактически «увидеть» потенциально скрытый текст, вы можете реализовать плагин всплывающей подсказки или кнопку сведений или что-то еще. Но быстрое и грязное решение состоит в том, чтобы использовать JavaScript, чтобы заголовок каждой ячейки был идентичен ее содержимому. Я использовал jQuery, но вам не нужно:
$('.datatable tbody td').each(function(index){
$this = $(this);
var titleVal = $this.text();
if (typeof titleVal === "string" && titleVal !== '') {
$this.attr('title', titleVal);
}
});
DataTables также предоставляет обратные вызовы на уровнях рендеринга строк и ячеек, поэтому вы можете предоставить логику для установки заголовков в этой точке вместо итератора jQuery.each
. Но если у вас есть другие слушатели, которые изменяют текст в ячейке, вам может быть лучше нажать на них с jQuery.each
в конце.
Весь этот метод усечения ТАКЖЕ будет иметь ограничение, которое вы указали, что вы не фанат: по умолчанию столбцы будут иметь одинаковую ширину. Я определяю столбцы, которые должны быть постоянно широкими или постоянно узкими, и явно устанавливаю для них ширину в процентах (вы можете сделать это в разметке или с помощью sWidth). Любые столбцы без явной ширины получают равномерное распределение оставшегося пространства.
Это может показаться большим количеством компромиссов, но конечный результат того стоил для меня.