Отзывчивый стол - Замена таблицы с Div
Я в настоящее время создаю свою собственную адаптивную таблицу. Я почти там, особенно с небольшой помощью manji. Что мне нужно сделать сейчас, это добавить или заменить div ниже таблицы, когда браузер имеет ширину менее 996 пикселей. Пока у меня есть это
$(window).on("load resize orientationchange", function() {
var width = $(window).width();
if (width <= 996){
$(table).replaceWith(output);
} else {
//bring it back
}
});
Это работает, когда вы делаете окно браузера меньше, но обвис. не возвращается к нормальному состоянию при изменении размера.
Вы можете посмотреть на ДЕМО ЗДЕСЬ.
Мой вопрос: как я могу заставить это работать правильно, и есть ли лучший способ сделать это?
3 ответа
Самый простой способ справиться с этим - создавать контент заранее, а не на лету. Используя ваш подход использования jQuery для рендеринга контента, мы изменили бы его следующим образом:
Во-первых, нам нужно настроить "мобильный" стол, чтобы он имел правильный стиль (в данном случае, без отображения):
output += '<div class="mobiled-table" style="display: none">';
Остальная часть вашей сборки DOM выполняется как обычно, но мы сразу же визуализируем ее, как только закончим писать:
output += '</div>';
var mobile_table = $(output);
$(table).after(mobile_table);
Теперь ваше событие можно скрыть / показать, когда мы отображаем:
$(window).on("load resize orientationchange", function() {
if ($(window).width() <= 996) {
mobile_table.show();
table.hide();
} else {
mobile_table.hide();
table.show();
}
});
Это означает, что когда происходит реальное событие, очень большие таблицы не требуют времени сборки DOM (что может быть значительным для больших таблиц). Это также означает, что вы можете вытолкнуть DOM-сборку из jQuery (что на самом деле не подходит для него, но, как вы видели, можно сделать это путем конкатенации - просто остерегайтесь, когда в базе данных есть знаки меньше или больше, чем и т. Д.) это) и вместо этого вы можете отобразить мобильную таблицу с тем же кодом, что и немобильная таблица.
Кроме того, вы можете, как указал Джо Фрамбах, полностью переместить этот материал из jQuery в CSS, где он будет быстрее и понятнее:
.mobiled-table { display: none }
@media (max-width: 996px) {
table { display: none }
.mobiled-table { display: block !important }
}
Вы можете сделать это в чистом CSS. Это не будет красиво, но вы можете сделать это.
@media (max-width: 600px) {
table, thead, tbody, th, tr, td {
display: block;
}
}
И это все!
Существует онлайн-инструмент, который позволяет вам конвертировать ваши таблицы в структурированные элементы div всего несколькими щелчками мыши: http://www.html-cleaner.com/
Узнайте больше об этой функции и найдите код CSS, который вы должны использовать здесь: http://www.html-cleaner.com/features/replace-html-table-tags-with-divs/