Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何合并具有相同类别但不同子级的列表部分,Jquery_Jquery_Node.js_List_Mongoose_Dust.js - Fatal编程技术网

如何合并具有相同类别但不同子级的列表部分,Jquery

如何合并具有相同类别但不同子级的列表部分,Jquery,jquery,node.js,list,mongoose,dust.js,Jquery,Node.js,List,Mongoose,Dust.js,我使用的是Node.js和Dust.js模板,它们通过Mongoose用MongoDB中的值填充层次列表。在数据到达模板之前尝试过滤数据显然是理想的,但我发现几乎没有什么可以帮助我弄清楚如何做到这一点,所以我通过jQuery在客户端进行。此代码是一个严重的黑客行为,请原谅!但是,至少在第一级合并中,它是有效的 我的猫鼬数据填充了一个按类别和子类别排列的卡片组的深入层次菜单(HTML中的一个简单ul li类型列表结构)。并非每个甲板都有子类别,或子类别的数量相同。这些都嵌入在每一层中,因为我在这里

我使用的是Node.js和Dust.js模板,它们通过Mongoose用MongoDB中的值填充层次列表。在数据到达模板之前尝试过滤数据显然是理想的,但我发现几乎没有什么可以帮助我弄清楚如何做到这一点,所以我通过jQuery在客户端进行。此代码是一个严重的黑客行为,请原谅!但是,至少在第一级合并中,它是有效的

我的猫鼬数据填充了一个按类别和子类别排列的卡片组的深入层次菜单(HTML中的一个简单ul li类型列表结构)。并非每个甲板都有子类别,或子类别的数量相同。这些都嵌入在每一层中,因为我在这里真正接受了noSQL理念!但从MySQL来看,在Mongoose中安排这一点肯定不那么容易

因此,由于类别和子类别嵌入到每个数据组的JSON中,我需要合并所有类别,然后逐个合并子类别1,以便数据组进入适当的位置,以便快速导航到数据组的数据

我今天写的代码(正如我说的,它非常可怕!)将合并列表的顶层。运行此代码后,对于具有副本的顶级类别,它们将合并,并保留所有子级

我的问题是:我想大大改进这段代码。现在我正在考虑为我的4或5个级别中的每一个创建这样的函数,它以一种我不想被限制的方式限制我(如果一个主题真的需要6个级别怎么办?),具体来说,我想:

  • 一种合并列表部分(包括子级)的方法,递归地查看下一级是否有重复的主题

  • 从底层开始合并是否明智

  • 正如我所说的,在呈现模板之前过滤数据可能会更好,但我还没有试着想出来

    这是我的密码:

    函数mergeLevel1(){
    var计数=0;
    var子文本;
    无功电流;
    $.each($($)ul.rootlist>li”).not(“ul-li-ul-a”),function(){
    var firstNode=$(此)
    var nodeText=$(“a:first”,this).text();
    //toastr.warning('nodeText是'+nodeText)
    $.each($($)ul.rootlist>li”).not(“ul-li-ul-a”).not(firstNode),function(){
    var siblingNode=$(此)
    var siblingText=$(“a:first”,this).text();
    //toastr.info('running sibling,siblingText为'+siblingText)
    if(nodeText==同级文本){
    toastr.info('我找到了'+siblingText'的副本)
    siblingNode.children().find('li').each(function()){
    如果(计数=0){
    subcatText=$(this.text();
    }
    subcatTextCurrent=$(this).text();
    计数++
    toastr.warning(“找到重复的”+$(this.text())的子项)
    //var targetNode=$(“a:first”,theNode).text()
    toastr.info('尝试附加到'+'#'+同级文本+'''ul'+'+subcatext)
    如果(计数>1){
    toastr.error('正在移动节点!')
    $(this).appendTo(“#”+同级文本+“#ul#”+子文本);
    }
    })
    }
    });
    删除();
    });
    //结束合并级别1
    }
    函数removempties(){
    $('ul:empty').parent().remove();
    }
    
    在我准备构建第二级合并功能时,我确信这是一种可怕的方法!我可能应该做的是,首先将列表留空,然后使用jQuery填充它。一旦我弄明白了如何在模板呈现后将Mongoose数据作为某种回调函数放入jQuery函数中,Express就必须有办法做到这一点,对吗然后,仅当类别和子类别一开始是唯一的时,我才会附加它们。