🎶 Sym - 一款用 Java 实现的现代化社区(论坛/BBS/社交网络/博客)平台

📕 思源笔记 - 一款桌面端笔记应用,支持 Windows、Mac 和 Linux

🎸 Solo - B3log 分布式社区的博客端节点,欢迎加入下一代社区网络

♏ Vditor - 一款浏览器端的 Markdown 编辑器

jQuery treeTable 顺序排列,求指点,求帮忙

treeTable 插件有很多,但 jQuery treeTable 应该算是比较简单的,易用,简洁的一个。功能不强,但是很好扩展。而且当作一个简单的 tree 进行使用。

需要注意的是你的 table 需要按照一定的顺序进行排列:儿子必须尾随跟着父亲。

例如:

树形结构如下:

{
    "c" : "data-c",
    "b": {
        "a": "data-a"
    }
}

html 结构中 a 必须尾随 b,不能位于 c 前或 c 后:

<table>

    <tr id="c"><td>data-c</td></tr>

    <tr id="b"><td>tree-b</td></tr>

    <tr id="a" class="child-of-b"><td>data-a</td></tr>

</table>

 

为了减少数据之间的转换,采用 array 进行数据存储(与底层数据库存储一致)。

[{"id": "a", "parent": "c", "data": "data-a"},
{"id": "b", "data": "tree-b"},
{"id": "c", "data": "data-c"}]

 

这样一来,势必就必须对 array 进行重新排序。唉,可惜以前读大学的时候没有好好写代码,不知道这样对不对?

即使侥幸对了,肯定有优化的办法,o(︶︿︶)o 唉,自己的算法好弱,连初高中,大学学的各种玄,各种分,各种函数,都记不清了。枉费我当初的天份啊。苍天哪。

var sortAll = function (ids) {
        for (var k = 0; k < ids.length; k++) {
            var id = ids[k];
            var order = 0;
            var objsId = [],    // 存放当前节点儿子的 id
            childList = [];     // 存放当前节点儿子的数据
            for (var i = 0; i < treeTableData.length; i++) {
                if (treeTableData[i].id === id) {
                    order = i;
                }
            if (reeTableData[i].parent === id) {
                // 如果为其儿子,存进去吧
                objsId.push(treeTableData[i].id);
                // 把儿子删除后存于 childList
                childList.push(treeTableData.splice(i, 1)[0]);
                i--;
            } 
        }
        
        for (var n = 0; n &lt; childList.length; n++) {
            // 按照你自己想要的顺序重写排列
            childList.splice(0, 0, childList.splice(n, 1)[0]);                
        }
        
        for (var m = 0; m &lt; childList.length; m++) {
            // 把儿子放到他爸爸下面吧
            treeTableData.splice(order + 1, 0, childList[m]);
        }
        
        if (objsId.length &gt; 0) {
            // 继续到你没有儿子为止
            sortAll(objsId);
        }
    }         
};

var getRoot = function () {
var order = 0,
objsId = [];
for (var i = 0; i < treeTableData.length; i++) {
if (!treeTableData[i].parent) {
// 获取顶层节点
objsId.push(treeTableData[i].id);

            if (order !== i) {
                // 顶层节点顺序位于子节点后,进行排序
                order++;
                var obj = treeTableData.splice(i, 1)[0];
                treeTableData.splice(order, 0, obj);
            }
        }
    }
    return objsId;
}

sortAll(getRoot());

 

  help me, help you.  ^^ 


欢迎注册黑客派社区,开启你的博客之旅。让学习和分享成为一种习惯!

留下你的脚步