使用带有动态单元格宽度的twitter bootstrap行/表结构,我有一个ajax脚本,可以从数据库中删除记录并删除HTML。
但是如何在删除后重新计算行?这是我无法理解逻辑过程的部分。
例如:如果我从中间行删除一个单元格,它将计算删除后是否有足够的可用空间并将单元格移动到下一行。然后循环到下一行/ etc
理想情况下,如果它适用于动态宽度会非常酷,所以所有跨度总计为12.如果确实有空间,它只会将项目移动到下一行。
如果我删除了一个大/宽的跨度,那么下一行有2个小跨度的空间可以替换。等我认为你在这里得到了这个想法。
<div class="row">
<div class="span4">...<a href="">Delete</a></div>
<div class="span4">...<a href="">Delete</a></div>
<div class="span4">...<a href="">Delete</a></div>
</div>
<div class="row">
<div class="span6">...<a href="">Delete</a></div>
<div class="span2">...<a href="">Delete</a></div>
<div class="span4">...<a href="">Delete</a></div>
</div>
<div class="row">
<div class="span2">...<a href="">Delete</a></div>
<div class="span8">...<a href="">Delete</a></div>
<div class="span2">...<a href="">Delete</a></div>
</div>
$('a').click(function(e){
e.preventDefault();
var $self = $(this);
$.ajax({
type: 'POST',
url: ajaxAction,
data: obj,
dataType: 'json',
success: function(data, status, jqXHR){
if(data && data.ok){
$self.parent().slideUp("slow", function(){
if(delete_container.substring(0,5) == ".span"){
// get parent row
var row = $(this).parent();
if(row.hasClass("row") || row.hasClass("row-fluid")){
var count = 0;
row.children("[class*='span']").each(function(){
count = $(this).attr('class').match(/\d+/);
});
if(count < 12){
// check next line and move item up if it fits
// then loop over everything again on the next row
}
}
}
$(this).remove();
})
}
}
});
});
答案 0 :(得分:0)
最简单的方法:更改表格的结构,然后删除<div class="row">
,然后将float: left
添加到您的单元格。浏览器会关注一切。 :)
但是如果它不可接受,那就让make函数叫rearrangeTable( fromRow )
:
rearrangeTable( fromRow ) { //from row is a number of row, where you have deleted cell.
var $actualRow = $('div.row:eq('+fromRow+')');
var $nextRow = $actualRow.next(div.row);
//getting free space in actual row
var freeSpace = $actualRow.width(); //IMPORTANT: width() not outerWidth()
$actualRow.find('cell_selector :)').each( function(i) {
freeSpace -= $(this).outerWidth();
})
var $nextCell;
while( $nextCell = getFirstCell( $nextRow ) ) { //ill not show this function its trivial, just returns first cell or false if there are no more cells
var cellWidth = $nextCell.outerWidth();
if( freeSpace >= cellWidth ) {
letsMoveThisCell( $nextCell, $actualRow);
freeSpace -= cellWidth;
} else {
break; //no more space, we can end there
}
}
它只是metacode,未经测试,显示了如何实现它的想法。现在,您应该从已删除单元格的行到表格末尾调用rearrangeTable( fromRow )
,它应该可以正常工作。