jquery Oracle APEX树扩展到子级

nhaq1z21  于 2023-06-29  发布在  jQuery
关注(0)|答案(2)|浏览(169)

我目前正在使用Oracle APEX 20.1,我正在尝试创建一个扩展到特定子对象的函数。
首先,我正在查找表单特定的节点,并向其添加类

$( "#tree_tree" ).treeView( "find", {
    depth: -1,
    findAll: true,
    match: function(n) {
        return n.label.indexOf( "Text" ) >= 0;
    }
} ).addClass("filterMatch");

现在有一个方法来展开这个节点

$( "#tree_tree" ).treeView( "expand", $('.filterMatch') );

但是它只扩展了这个类的节点。它不会扩展父节点。因此,如果有3个级别,并且这个类的节点在3lvl上,并且树完全折叠,则不会发生任何事情。
如何展开特定节点的所有父节点?

nwwlzxa7

nwwlzxa71#

几个月前,我遇到了同样的问题,并提出了这个问题:

function getParentArray(n){
    var arr = [], ln = n;
    while (ln._parent !== null) arr.push(ln = ln._parent);
    return arr.reverse(); // in correct order
};

function expandUpTo(aID) {
    if (aID == '') return;
    var tree = $("#mytree div[role='tree']");
    var treenode = tree.treeView("find", {
        depth: -1,
        findAll: true,
        match: function(n) {
            return parseInt(n.id.split(':')[0]) == aID;
        }
    });

    var mnode = tree.treeView("getNodes",treenode);
    
    if (mnode[0]) {

        getParentArray(mnode[0]).forEach(function(p){
            //get the DOM element for the datanode
            var ex = tree.treeView("getTreeNode",p);
            //expand each node along the path
            tree.treeView("expand",ex);
        });
    }
}

虽然很容易找到某个节点,但您需要以正确的顺序遍历节点。这就是为什么函数getParentArray包含一个reverse。注意,我的IDs包含一些冒号分隔的数据,这就是为什么我使用split来获取第一个元素。如果你不需要这个,那一行可以简化为:

return n.id == aID;
zlhcx6iw

zlhcx6iw2#

我们可以在页面加载时使用True操作创建动态操作,如Expand Tree,这在Action -> Component -> Expand Tree.中很容易获得
它将树扩展到所有级别的叶子级别。

相关问题