Как сделать <div>, <span> или список отображения табличных данных в виде таблицы?
Во-первых, позвольте мне сказать, что я прочитал другие ответы на это, и я понимаю, что для табличных данных использование таблиц - лучший способ. Причина, по которой мне нужно использовать что-то другое, кроме таблицы, заключается в том, что я использую jQuery-плагин (JQuery UI sortable to exact), который требует, чтобы определенные ряды данных были вложены внутри других. Я не знаю, как это сделать с таблицами, и поэтому мне нужно использовать другой элемент (в настоящее время я использую div).
Мои данные - это стандартные табличные данные, которые являются 1 ячейкой на единицу данных.
Name Address
Bob 123 Main edit_button drag&drop_button
Joe 123 Fake edit_button drag&drop_button
Sue 456 Road edit_button drag&drop_button
Ann 123 Street edit_button drag&drop_button
В этом примере, перетаскивая Боба, он также перетащит Джо и Сью, команду Боба. Энн может перемещаться только на три или ниже трех, в то время как Джо и Сью могут только переключаться друг на друга.
В html это выглядит следующим образом.
<div class="table">
<div class="header">Header information</div>
<div>
<div class="row">Bob information</div>
<div>
<div class="row">Joe information</div>
<div class="row">Sue information</div>
</div>
</div>
<div>
<div class="row">Ann information</div>
</div>
</div>
Насколько мне известно, это вложение не может быть выполнено с помощью таблиц.
Мне не нужно использовать divs, если что-то еще будет работать лучше.
Мой вопрос в основном заключается в том, как я могу получить эту информацию в табличном формате?
В настоящее время лучше всего поставить каждый элемент данных, включая заголовки, в div с фиксированной шириной (и применять границы по мере необходимости для внешнего вида), но это означает, что "таблица" не может изменять размер, чтобы наилучшим образом соответствовать предоставленная информация.
Еще одна попытка, которую я сделал, которая, возможно, намного беспощадна, состоит в том, чтобы каждая строка имела новую таблицу с той же настройкой, которая включает заголовок, который не отображается. Это дает почти тот вид, который я хочу, но некоторые интервалы заметно отключаются, если имена не являются точной длиной.
Спасибо за помощь.
P.S.
Я надеюсь, что реальный вопрос не слишком конкретный, хотя я считаю, что мое оправдание тому, почему таблица не работает, кажется слишком специфичной.
Edit:
Будет ли какой-то способ заставить следующее работать, чтобы можно было использовать таблицу?
<table>
<thead>table header stuff</thead>
<tbody>
<mtne*>
<tr>Bob information</tr>
<mtne>
<tr>Joe information</tr>
</mtne>
<mtne>
<tr>Sue information</tr>
</mtne>
</mtne>
<mtne>
<tr>Ann information</tr>
</mtne>
</tbody>
</table>
* mtne = элемент размещения мифических таблиц.
Изменить 2:
При дальнейшем тестировании я обнаружил, что стиль css, чтобы заставить divs вести себя как таблицы, имеет ту же проблему. где, если строки не размещены рядом друг с другом, а некоторые - вложенными, они не делят данные ширины. Из-за ограничений по времени мне нужно просто переключиться на использование div с предустановленной шириной.
Кому-нибудь, кто может приехать, может быть некоторая возможность при использовании treeTables, но я еще не проверил его и мне нужно для перемещения.
Ответы
Ответ 1
Вы можете использовать CSS и div для эмуляции таблиц с display:table;
, display:table-row;
, display:table-cell;
и т.д.
Рабочая демонстрация jsFiddle
HTML:
<div class="table">
<div class="header">
<div class="cell">Name</div>
<div class="cell">Address</div>
<div class="cell">Action 1</div>
<div class="cell">Action 2</div>
</div>
<div class="rowGroup">
<div class="row">
<div class="cell">Bob</div>
<div class="cell">Address</div>
<div class="cell">Button</div>
<div class="cell">Another button</div>
</div>
</div>
<div class="rowGroup">
<div class="row">
<div class="cell">Joe</div>
<div class="cell">Address</div>
<div class="cell">Button</div>
<div class="cell">Another button</div>
</div>
<div class="row">
<div class="cell">Sue</div>
<div class="cell">Address</div>
<div class="cell">Button</div>
<div class="cell">Another button</div>
</div>
</div>
<div class="rowGroup">
<div class="row">
<div class="cell">Ann</div>
<div class="cell">Address</div>
<div class="cell">Button</div>
<div class="cell">Another button</div>
</div>
</div>
</div>
CSS
.table {
display:table;
}
.header {
display:table-header-group;
font-weight:bold;
}
.rowGroup {
display:table-row-group;
}
.row {
display:table-row;
}
.cell {
display:table-cell;
width:25%;
}
Поддерживается IE8 + (это функция CSS2.1)
Дальнейшее чтение:
Ответ 2
Один из вариантов заключается в том, что вы можете вставить table
внутри td
:
JS Fiddle
<table>
<thead>
<tr>
<th>Outer Table</th>
</tr>
</thead>
<tbody>
<tr>
<td>Bob information
<table>
<thead>
<tr>
<th>Inner Table</th>
</tr>
</thead>
<tbody>
<tr>
<td>Joe information</td>
</tr>
<tr>
<td>Sue information</td>
</tr>
</tbody>
</table>
</td>
</tr>
<tr>
<td>Ann information</td>
</tr>
</tbody>
</table>
PS - Запомните структуру вашей таблицы - вы не можете пропустить td
или th
s.