Bootstrap中table列上下移动怎样做,代码是什么
Admin 2022-10-31 群英技术资讯 859 次浏览
这篇文章给大家分享的是“Bootstrap中table列上下移动怎样做,代码是什么”,对大家学习和理解有一定的参考价值和帮助,有这方面学习需要的朋友,接下来就跟随小编一起学习一下吧。排序
1. 按钮排序
点击排序按钮,页面的序号变为可点击的方向键,实现手动排序(第一行没有下箭头,最后一行没有上尖头)


实现方式
1.击则“编辑”,改变内容
<button class="btn btn-info editBtn" style="display:inline-block" onclick="handleTableEditBtn(this)">编辑</button>
<button class="btn btn-primary saveBtn" style="display:none" onclick="handleTableEditBtn(this)">保存</button>
var handleTableEditBtn = function(el){
"use strict";
if(el){ // TODO 保存到服务器
var $el = $(el);
var $tr = $el.closest("tr");
var rowspanNum = $tr.data("rowspanNum");
var btnOption = $el.closest(".tableOptionBtnBox").data("btn");
var tableOptionBtnBox = $el.closest(".tableOptionBtnBox");
var $editBtn = $el.closest(".tableOptionBtnBox").find(".editBtn");
if(btnOption){ // 编辑状态 -> 查看状态
$el.attr("disabled",true);
updateAppDataDialog($el);
}else{ // 查看状态 -> 编辑状态 检查当前APP是否可编辑
$editBtn.attr("disabled",true);
checkUpdateAppDataStatus().done(function () {
$editBtn.attr("disabled",false);
tableOptionBtnBox.data("btn", 1);
tableOptionBtnBox.find(".saveBtn").show();
tableOptionBtnBox.find(".editBtn").hide();
nextElements($tr, rowspanNum, handleNotEditable);
}).fail(function () {
$editBtn.attr("disabled",false);
});
}
}
};
2.首位行的特殊显示
// 当点击第一行的⬇时,该行显示两个按钮,目标行显示一个按钮
if (oldId == 1 && dir == 1) {
// 共两行,该行显示一个按钮,目标行显示一个按钮
if (total == 2) {
$tr.find(".upImgBtn").show();
$tr.find(".downImgBtn").hide();
var $nextTr = $(el).parents("tr").next("tr");
$nextTr.find(".upImgBtn").hide();
$nextTr.find(".downImgBtn").show();
} else {
$tr.find(".upImgBtn").show();
$tr.find(".downImgBtn").show();
var $nextTr = $(el).parents("tr").next("tr");
$nextTr.find(".upImgBtn").hide();
$nextTr.find(".downImgBtn").show();
}
}
// 当点击第二行的⬆时,该行显示一个按钮,目标行显示两个按钮
else if (oldId == 2 && dir == 0) {
if (total == 2) {
$tr.find(".upImgBtn").hide();
$tr.find(".downImgBtn").show();
var $nextTr = $(el).parents("tr").prev("tr");
$nextTr.find(".upImgBtn").show();
$nextTr.find(".downImgBtn").hide();
} else {
$tr.find(".upImgBtn").hide();
$tr.find(".downImgBtn").show();
var $nextTr = $(el).parents("tr").prev("tr");
$nextTr.find(".upImgBtn").show();
$nextTr.find(".downImgBtn").show();
}
}
// 当点击倒数第二行的⬇时,该行显示一个按钮,目标行显示两个按钮
else if (oldId == total - 1 && dir == 1) {
$tr.find(".upImgBtn").show();
$tr.find(".downImgBtn").hide();
var $nextTr = $(el).parents("tr").next("tr");
$nextTr.find(".upImgBtn").show();
$nextTr.find(".downImgBtn").show();
}
// 当点击倒数第一行的⬆时,该行显示两个按钮,目标行显示一个按钮
else if (oldId == total && dir == 0) {
$tr.find(".upImgBtn").show();
$tr.find(".downImgBtn").show();
var $nextTr = $(el).parents("tr").prev("tr");
$nextTr.find(".upImgBtn").show();
$nextTr.find(".downImgBtn").hide();
}
3.上移下移
// 目标行
var $targetTr;
// 特殊处理(首行下移)
if ($div.attr("data-rowid") == 1 && dir == 1) {
$tr.find(".rowNum").find(".rowNumClass").attr("data-rowid", 2);
$tr.data("rowspanNum",total);
var str = $tr.html();
var start = str.indexOf("</td>") + 5;
var end = str.lastIndexOf("<td")
// 第一行头部
var startPart = str.substring(0, start);
// 第一行尾部
var endPart = str.substring(str.lastIndexOf("<td"));
// 第一行中部
var oneLine = str.substring(start, end);//截取字符串
// 第二行
$targetTr = $(el).parents("tr").next("tr");
$targetTr.find(".rowNum").find(".rowNumClass").attr("data-rowid", 1);
var twoLine = $targetTr.html();
var result1 = startPart + twoLine + endPart;
var result2 = oneLine
$tr.html(result1);
$targetTr.html(result2);
var data = $targetTr.find("td").eq(3).find(".editable").find("input").val();
var editable = "";
if (data == 0) {
editable += '<input value=0 type="checkbox" class="js-switch form-control" checked name="openStatus">';
} else {
editable += '<input value=1 type="checkbox" class="js-switch form-control" name="openStatus">';
}
$targetTr.find("td").eq(2).find(".editable").html(editable);
$targetTr.before("<tr>" + $tr.html() + "</tr>")
// $targetTr.insertBefore
$targetTr.data("updatedSort", true);
// $targetTr.closest(".tableOptionBtnBox").attr("btn", 1);
$tr.remove();
// return;
}
// 特殊处理(第二行上移)
// else if ($div.data("rowid") == 2 && dir == 0) {
else if ($div.attr("data-rowid") == 2 && dir == 0) {
// 第一行
$targetTr = $(el).parents("tr").prev("tr");
$targetTr.data("rowspanNum",total);
var data = $tr.find("td").eq(3).find(".editable").find("input").val();
var editable = "";
if (data == 0) {
editable += '<input value=0 type="checkbox" class="js-switch form-control" checked name="openStatus">';
} else {
editable += '<input value=1 type="checkbox" class="js-switch form-control" name="openStatus">';
}
$tr.find("td").eq(2).find(".editable").html(editable);
var data = $tr.find("td").eq(2).find(".editable").find("input").val();
var editable = "";
if (data == 0) {
editable += '<input value=0 type="checkbox" class="js-switch form-control" checked name="openStatus">';
} else {
editable += '<input value=1 type="checkbox" class="js-switch form-control" name="openStatus">';
}
$tr.find("td").eq(2).find(".editable").html(editable);
var str = $targetTr.html();
var start = str.indexOf("</td>") + 5;
var end = str.lastIndexOf("<td")
// 第一行头部
var startPart = str.substring(0, start);
// 第一行尾部
var endPart = str.substring(str.lastIndexOf("<td"));
// 第一行中部
var oneLine = str.substring(start, end);//截取字符串
// 第二行
var twoLine = $tr.html();
var result1 = startPart + twoLine + endPart;
var result2 = oneLine
$tr.html(result1);
$targetTr.html(result2);
$targetTr.before("<tr>" + $tr.html() + "</tr>")
$targetTr.data("updatedSort", true);
// $targetTr.closest(".tableOptionBtnBox").attr("btn", 1);
$tr.remove();
}
// 上移
else if (dir == 0) {
$targetTr = $(el).parents("tr").prev("tr");
var data = $tr.find("td").eq(2).find(".editable").find("input").val();
var editable = "";
if (data == 0) {
editable += '<input value=0 type="checkbox" class="js-switch form-control" checked name="openStatus">';
} else {
editable += '<input value=1 type="checkbox" class="js-switch form-control" name="openStatus">';
}
$tr.find("td").eq(2).find(".editable").html(editable);
$targetTr.before("<tr>" + $tr.html() + "</tr>");
$targetTr.data("updatedSort", true);
$tr.remove();
}
// 下移
else {
$targetTr = $(el).parents("tr").next("tr");
var data = $targetTr.find("td").eq(2).find(".editable").find("input").val();
var editable = "";
if (data == 0) {
editable += '<input value=0 type="checkbox" class="js-switch form-control" checked name="openStatus">';
} else {
editable += '<input value=1 type="checkbox" class="js-switch form-control" name="openStatus">';
}
$targetTr.find("td").eq(2).find(".editable").html(editable);
$tr.before("<tr>" + $targetTr.html() + "</tr>");
$tr.data("updatedSort", true);
$targetTr.remove();
2. 模态框排序

点击排序时,弹出模态框

该方法为bootstrap自带方法,可是找遍全网也没看到示例,不确定是不是被新版本删除掉了。但还是比较实用的。
实现方式
需提前导入 bootstrap-order.min.js
function initSortEvent(index) {
$("#btn-order").click(function () {
var numDatas = "";
var nameDatas = "";
var data = index.getData();
$.each(data,function(d_index){
numDatas=numDatas+ data[d_index].num+",";
nameDatas=nameDatas+ data[d_index].name+",";
});
$.ajax({
url: contextPath+"/oper/ios/config/sort",
type: "post",
dataType: "json",
cache: false,
async: false,
data: {"numDatas":numDatas,"nameDatas":nameDatas},
success: function (d) {
if(d.code==200){
dataTable.ajax.reload();
}else{
console.log("排序失败");
}
}
});
index.hide();
});
$('#content').on("click", function (){
index.hide();
});
$('#sidebar').on("click", function (){
index.hide();
});
$('#showSourceSort').on('click',function (event) {
event.stopPropagation();//阻止事件冒泡
$("#ios-config-table").find("tr").each(function (i) {
var status = $(this).find(".options").data("status");
// 只排序启用状态
if (i > 0 && status == 0) {
var order = $(this).find('td').eq(0).html();
var title = $(this).find('td').eq(1).find('span').html();
index.addItem({id: order, name: title, num: parseInt(order)})
// addSort({id: order, name: title, num: parseInt(order)}, index)
}
});
index.toggleShow();
});
}
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
现在很多登录注册操作都需要输入验证码,而vue中验证码组件很实用,对此这篇文章就主要给大家分享vue验证码组件的使用,下文有示例供大家参考,感兴趣的朋友可以了解看看。
jQuery中删除样式的方法是什么?对于删除样式我们可以利用removeAttr()方法和removeClass()方法,那么这两个方法具体是如何删除样式的呢?接下来我们一起来学习一下。
随着组件的细化,就会遇到多组件状态共享的情况,今天我们介绍的是 vue.js 2.6 新增加的 Observable API ,通过使用这个 api 我们可以应对一些简单的跨组件数据状态共享的情况,感兴趣的可以了解一下
eslint的配置引入比较简单,网上有比较多的教程,而stylelint的教程大多语焉不详。在这里,我会介绍一下我在引入stylelint所遇到的坑,以及解决方法
mixins(混入)官方的描述是一种分发 Vue 组件中可复用功能的非常灵活的方式,这篇文章主要给大家介绍了关于vue中混入 mixins使用的相关资料,需要的朋友可以参考下
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008