網站首頁 編程語言 正文
這里記錄一下使用jquery treetable時遇到的坑。
我這里的需求是做一個樹形表格,并且可拖拽。
最后要實現的效果大概是這樣的:
首先,我們去jquery treetable?官網下載文件
官網網址
用別人的東西,首先看下官方給的文檔:
全英文,光看可能是看不太懂,而且,官方在線的文檔可能是不太友好,如下圖所示:
示例的樹形表格因為沒有引用Jqueryui 報錯。
有點尷尬,我們打開剛剛下載的文件,里邊有一個index.html文件,在瀏覽器中打開,上圖我紅框標注的示例表格部分還是亂的。
其實文檔中已經說明,jquery treetable樹形表格的拖拽是基于jqueryui實現的,因此我們需要在示例文件中(index.tml)引用jqueryui。
引用成功之后,如下圖所示:
然后其余的文檔中描述的很清楚。一步一步來,或者參照我下邊的實例就可以實現樹形。
但是在做拖拽的時候需要注意一下:
首先,我們來看一下拖拽部分的代碼:
$("#example-advanced").treetable({ expandable: true });
// Highlight selected row
$("#example-advanced tbody").on("mousedown", "tr", function() {
$(".selected").not(this).removeClass("selected");
$(this).toggleClass("selected");
});
// Drag & Drop Example Code
$("#example-advanced .file, #example-advanced .folder").draggable({
helper: "clone",
opacity: .75,
refreshPositions: true,
revert: "invalid",
revertDuration: 300,
scroll: true
});
$("#example-advanced .folder").each(function() {
$(this).parents("#example-advanced tr").droppable({
accept: ".file, .folder",
drop: function(e, ui) {
var droppedEl = ui.draggable.parents("tr");
$("#example-advanced").treetable("move", droppedEl.data("ttId"), $(this).data("ttId"));
},
hoverClass: "accept",
over: function(e, ui) {
var droppedEl = ui.draggable.parents("tr");
if(this != droppedEl[0] && !$(this).is(".expanded")) {
$("#example-advanced").treetable("expandNode", $(this).data("ttId"));
}
}
});
});
上述代碼中有兩個class類名,file? folder?要實現拖拽,必須將這兩個類名的其中之一放入每一行(tr)下的單元格(td)中,具體是放到任意一個還是每一個單元格中,看你自己的需求。
如果放file,那么行下邊不允許有子集,folder,那么行下邊是允許有子集的,這里需要注意一下,具體放什么,看你自己的需求。
下邊放一下我測試的代碼
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>使用jquery treetable 實現樹形表格拖拽</title>
<link href="./css/jquery.treetable.theme.default.css" type="text/css" />
<link href="./css/jquery.treetable.css" type="text/css" />
<link href="./layui/css/layui.css" media="all">
</head>
<body>
<table lay-even="" lay-skin="row" style="width:60%" id="example1">
<thead>
<tr >
<th>人物</th>
<th>民族</th>
<th>出場時間</th>
<th>格言</th>
<th>操作</th>
</tr>
</thead>
<tbody id="tbodys">
<tr data-tt-id="1" >
<td>1</td>
<td>1</td>
<td>1</td>
<td>1</td>
<td><button class='layui-btn layui-btn-danger'>刪除</button></td>
</tr>
<tr data-tt-id="1-1" data-tt-parent-id="1">
<td>2</td>
<td>2</td>
<td>2</td>
<td>2</td>
<td><button class='layui-btn layui-btn-danger'>刪除</button></td>
</tr>
<tr data-tt-id="1-1-1" data-tt-parent-id="1-1">
<td>3</td>
<td>3</td>
<td>3</td>
<td>3</td>
<td><button class='layui-btn layui-btn-danger'>刪除</button></td>
</tr>
<tr data-tt-id="2" >
<td>4</td>
<td>4</td>
<td>4</td>
<td>4</td>
<td><button class='layui-btn layui-btn-danger'>刪除</button></td>
</tr>
<tr data-tt-id="2-1" data-tt-parent-id="2">
<td>5</td>
<td>5</td>
<td>5</td>
<td>5</td>
<td><button class='layui-btn layui-btn-danger'>刪除</button></td>
</tr>
</tbody>
</table>
</body>
<script src="https://libs.cdnjs.net/jquery/2.2.1/jquery.js"></script>
<script src="https://libs.cdnjs.net/jqueryui/1.12.1/jquery-ui.js"></script>
<script src="./layui/layui.js" charset="utf-8"></script>
<script src="./jquery.treetable.js"></script>
<script>
$(function() {
// ================== jquery treetable ==============================
initTreeTable();
});
// treetable 樹拖拽
function initTreeTable(){
// 加載treetable
$("#example1").treetable({
expandable: true,// 展示
initialState :"expanded",//默認打開所有節點
stringCollapse:'',
stringExpand:''
});
// 讓選中的行高亮
$(document).on('mousedown', '#example1 tbody tr', function() {
$("tr.selected").removeClass("selected");
$(this).toggleClass("selected");
});
$("#example1 .file, #example1 .folder").draggable({
helper: "clone",
opacity: .75,
refreshPositions: true, // Performance?
revert: "invalid",
revertDuration: 300,
scroll: true
});
$("#example1 .folder").each(function() {
$(this).parents("#example1 tr").droppable({
accept: ".file, .folder",
drop: function(e, ui) {
var droppedEl = ui.draggable.parents("tr");
// 獲取移動行的ID
// moveid = droppedEl.data("ttId");
// 獲取目標行的ID
// targetid = $(this).data("ttId");
$("#example1").treetable("move", droppedEl.data("ttId"), $(this).data("ttId"));
},
hoverClass: "accept",
over: function(e, ui) {
var droppedEl = ui.draggable.parents("tr");
if(this != droppedEl[0] && !$(this).is(".expanded")) {
$("#example1").treetable("expandNode", $(this).data("ttId"));
}
}
});
});
}
var layer = null;
// 刪除行
// 這里要著重說明一下,動態添加的html是沒有綁定js事件的,因此我這里使用jquery封裝的事件委托來為html動態綁定事件
// 具體請參考網址:https://www.jianshu.com/p/568f93410345
$(document).on('click', '#tbodys tr button', function() {
var obj = $(this).parents("tr");
// 在layui中使用layer彈窗
layui.use('layer', function(){
layer = layui.layer;
layer.confirm('您確定要刪除這個字段', {
btn: ['確定','取消'] //按鈕
}, function(){
obj.remove();
layer.msg('刪除成功', {icon: 1});
});
});
});
</script>
</html>
原文鏈接:https://juejin.cn/post/7108536229167104037
相關推薦
- 2022-05-25 org.springframework.data.redis.RedisSystemExceptio
- 2022-05-07 Python中的集合一起來學習一下_python
- 2023-05-14 python隨機獲取列表中某一元素的方法_python
- 2022-10-22 Golang?中反射的應用實例詳解_Golang
- 2022-10-31 Kotlin定義其他類的實現詳解_Android
- 2022-05-28 關于docker?compose安裝redis集群的問題(集群擴容、集群收縮)_docker
- 2022-09-05 Spark Sql之count(distinct)分析&&學習&&驗
- 2023-10-17 nginx重定向url、nginx域名轉發
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支