如何用div+ul写出表格

  在项目中难免会遇到奇葩的需求,比如看似表格却是纵向列,确实让人头疼。所幸最后折腾出用div+ul实现,只是相比使用框架要写比较多的样式和调试。

  先上需求图:

 上js代码:(其中res是调接口返回的数据)

for(var i=0; i<res.length; i++){
    
    var roomState = res[i].roomState;

if(roomState == '整租'){

var showRoom = '<div class="col-md-3 roomColor'+i+'" style="padding: 0;"><div class="room wholeRentTitle'+ i +'"></div><div class="roomDetail wholeRentInfo'+ i +'"></div></div>';

$mainRoomContent.append(showRoom);

currentObj.$('.wholeRentTitle'+i).text(res[i].roomName);

var wholeRentInfo = currentObj.$('.wholeRentInfo'+i);

var col1 = '<ul class="col1 col-md-8" style="padding: 0; margin: 0;"><li><span>机房状态</span></li><li><span>客户名称</span></li><li><span>已加电数量/机架总数</span></li><li><span>定向预占机架数量</span></li><li><span>不可用机架数量</span></li><li><span></span></li></ul>';

wholeRentInfo.append(col1);

var col2 = '<ul class="col2 col-md-4 wholeRent'+ i +'" style="padding: 0; margin: 0;"></ul>';

wholeRentInfo.append(col2);

var $wholeRent = currentObj.$('.wholeRent'+i);

$wholeRent.append('<li><span>'+ res[i].roomState +'</span></li>');

$wholeRent.append('<li><span title="'+ res[i].custName +'">'+ res[i].custName +'</span></li>');

$wholeRent.append('<li><span>'+ res[i].jdNum + '/' + res[i].frameNum +'</span></li>');

$wholeRent.append('<li><span>'+ res[i].freeDirectionalNum +'</span></li>');

$wholeRent.append('<li><span>'+ res[i].unavailableNum +'</span></li>');

$wholeRent.append('<li><span></span></li>');

}

if(roomState == '中小客户租用'){

var showRoom = '<div class="col-md-3 roomColor'+i+'" style="padding: 0;"><div class="room smallCustTitle'+ i +'"></div><div class="roomDetail smallCustInfo'+ i +'"></div></div>';

$mainRoomContent.append(showRoom);

currentObj.$('.smallCustTitle'+i).text(res[i].roomName);

var smallCustInfo = currentObj.$('.smallCustInfo'+i);

var col1 = '<ul class="col1 col-md-8" style="padding: 0; margin: 0;"><li><span>机房状态</span></li><li><span>客户名称</span></li><li><span>已加电数量/机架总数</span></li><li><span>零散预占机架数量</span></li><li><span>空闲可售机架数量</span></li><li><span>不可用机架数量</span></li></ul>';

smallCustInfo.append(col1);

var col2 = '<ul class="col2 col-md-4 smallCust' + i +' " style="padding: 0; margin: 0;"></ul>';

smallCustInfo.append(col2);

var $smallCust = currentObj.$('.smallCust'+i);

$smallCust.append('<li><span>'+ res[i].roomState +'</span></li>');

$smallCust.append('<li><span title="'+ res[i].custName +'">'+ res[i].custName +'</span></li>');

$smallCust.append('<li><span>'+ res[i].jdNum + '/' + res[i].frameNum +'</span></li>');

$smallCust.append('<li><span>'+ res[i].campOnNum +'</span></li>');

$smallCust.append('<li><span>'+ res[i].freeNum +'</span></li>');

$smallCust.append('<li><span>'+ res[i].unavailableNum +'</span></li>');

}

if(roomState == '空闲'){

var showRoom = '<div class="col-md-3 roomColor'+i+'" style="padding: 0;"><div class="room freeTitle'+ i +'"></div><div class="roomDetail freeInfo'+ i +'"></div></div>';

$mainRoomContent.append(showRoom);

currentObj.$('.freeTitle'+i).text(res[i].roomName);

var freeInfo = currentObj.$('.freeInfo'+i);

var col1 = '<ul class="col1 col-md-8" style="padding: 0; margin: 0;"><li><span>机房状态</span></li><li><span>客户名称</span></li><li><span>已加电数量/机架总数</span></li><li><span>预占机架数量</span></li><li><span>空闲可售机架数量</span></li><li><span>不可用机架数量</span></li></ul>';

freeInfo.append(col1);

var col2 = '<ul class="col2 col-md-4 freeRoom'+ i +'" style="padding: 0; margin: 0;"></ul>';

freeInfo.append(col2);

var $freeRoom = currentObj.$('.freeRoom'+i);

//预占机架数量=零散+定向

var campOnNums = parseInt(res[i].campOnNum) + parseInt(res[i].freeDirectionalNum);

$freeRoom.append('<li><span>'+ res[i].roomState +'</span></li>');

$freeRoom.append('<li><span title="'+ res[i].custName +'">'+ res[i].custName +'</span></li>');

$freeRoom.append('<li><span>'+ res[i].jdNum + '/' + res[i].frameNum +'</span></li>');

$freeRoom.append('<li><span>'+ campOnNums +'</span></li>');

$freeRoom.append('<li><span>'+ res[i].freeNum +'</span></li>');

$freeRoom.append('<li><span>'+ res[i].unavailableNum +'</span></li>');

}

if(roomState == '库房'){

var showRoom = '<div class="col-md-3 storage" style="padding: 0; background-color: #c1c1c1;"><div class="storageTitle storageRoom'+ i +'"></div><div class="storageContent"></div></div>';

$mainRoomContent.append(showRoom);

currentObj.$('.storageRoom'+i).text(res[i].roomName);

currentObj.$('.storageContent').text(res[i].roomState);

var roomDetailHeight = currentObj.$('.roomDetail').height()-1;

currentObj.$('.storageContent').height(roomDetailHeight);

currentObj.$('.storageContent').css('line-height',roomDetailHeight + 'px');

}

}

 

css代码:

div,ul,li,span {

padding: 0;

margin: 0;

}



ul {

float: left;

list-style-type: none;

}



.col1 li {

width: 100%;

height: 100%;

text-align: center;

border-bottom: #666 1px solid;

border-right: #666 1px solid;

border-left: #666 1px solid;

}



.col2 li{

width: 100%;

height: 100%;

text-align: center;

overflow: hidden;

white-space:nowrap;

text-overflow: ellipsis;

border-bottom: #666 1px solid;

border-right: #666 1px solid;

}



span {

padding: 0 5px;

font-family: "微软雅黑";

font-size: 0.6rem;

}



.room {

border: #666 1px solid;

text-align: center;

}



.roomDetail {

overflow: hidden;

}

.storage {

border-bottom: #666 1px solid;

border-right: #666 1px solid;

border-left: #666 1px solid;

}



.storageTitle {

border-top: #666 1px solid;

border-bottom: #666 1px solid;

text-align: center;

}



.storageContent {

text-align: center;

vertical-align: middle;

}

  其中js用原生的代码实现,敲代码繁琐、可读性较差,项目是用ES5,如果是用ES6会好很多。如果小伙伴们有更好的方法,欢迎提出交流。当初在网上找不到纵向列表格实现的资料,希望借此第一次尝试写博客总结,也希望抛砖引玉能有更优化的解决方案。

  

以上。

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值