您好我需要将列转换为行和行转换为列。我左边有列标题和行标题。行标题只是行左侧的粗体文本,用于定义行的内容。
我想让这张桌子移动友好。该表是7列宽,7列不显示在智能手机中。所以我的想法是使用媒体查询来显示切换列和行的表,因为不会超过3行。可以这样做吗?
答案 0 :(得分:11)
<强> DEMO 强>
Css解决方案:只需转动td
&amp; th
至display:block;
&amp;您的tr
到display:table-cell;
CSS:
@media screen and (max-width:767px) {
table tr > *{
display: block;
}
table tr {
display: table-cell;
}
}
缺点:如果您的单元格数据过多,布局将会突破 Example 。
jQuery解决方案:我们可以跟踪元素高度以保持不变 DEMO
JS:
$(function () {
switchRowsAndCols("table", 767);
});
function switchRowsAndCols(thisTable, resolution) {
if ($(window).width() < resolution) {
switchRowsAndColsInnerFun(thisTable);
}
$(window).resize(function () {
if ($(window).width() < resolution) {
switchRowsAndColsInnerFun(thisTable);
}else{
switchRowsAndColsRemove(thisTable);
}
});
};
function switchRowsAndColsRemove(thisTable) {
$("tr > *", thisTable).css({
height: 'auto'
});
};
function switchRowsAndColsInnerFun(thisTable) {
var maxRow = $("tr:first-child() > *", thisTable).length;
for (var i = maxRow; i >= 0; i--) {
$("tr > *:nth-child(" + i + ")", thisTable).css({
height: 'auto'
});
var maxHeight = 0;
$("tr > *:nth-child(" + i + ")", thisTable).each(function () {
var h = $(this).height();
maxHeight = h > maxHeight ? h : maxHeight;
});
$("tr > *:nth-child(" + i + ")", thisTable).each(function () {
$(this).height(maxHeight);
});
};
};
答案 1 :(得分:2)
好吧,我认为我会为其他寻求额外帮助的人提供一个稍微不同的jQuery
解决方案。
如果有使用脚本,也可以让它做所有事情(以下脚本需要运行4.2ms
,这对我来说似乎很合理: - )
以下内容基本上是将tabular-data
转换为multidimensional array
。
1, 2, 3, 4
5, 6, 7, 8
9, 10, 11, 12
<强>变为:强>
[[1,5,9],[2,6,10],[3,7,11],[4,8,12]]
然后,只需要根据新的table
和array
重写for-loops
即可。
有一点需要注意,您必须将其绑定到media query
或window.resize
处理程序才能获得您正在寻找的后天效果。这就像更改我指定的on.click
处理程序一样简单。
看一看!它很漂亮:
<强> HTML:强>
<input type="button" id="switch" value="switch" \>
<table id="switchItems">
<tr>
<td>a</td>
<td>b</td>
<td>c</td>
<td>d</td>
</tr>
<tr>
<td>...etc
jQuery脚本:
$(function(){
$('#switch').on('click', function(){
var items = [];
var itemsConv = [];
var table = $('#switchItems');
var row,cell;
// FIND ALL OF THE DATA
$("tr").each(function(){
var trRow = [];
$(this).children().each(function() {
trRow.push($(this).text());
});
items.push(trRow);
});
for(var j=0;j<items[0].length;j++){
var newRow = [];
for(var i=0;i<items.length;i++){
newRow.push(items[i][j]);
}
itemsConv.push(newRow);
}
// KILL OUR CURRENT DATA IN THE TABLE
table.empty();
// REWRITE OUR TABLE WITH NEW DATA
for(var i=0; i<itemsConv.length; i++){
row = $( '<tr />' );
table.append( row );
for(var j=0; j<itemsConv[i].length; j++){
cell = $('<td>'+itemsConv[i][j]+'</td>');
row.append( cell );
}
}
});
});
希望这有用!