使用jquery将多个列表元素的名称聚合到一个数组中

时间:2017-02-01 12:30:15

标签: javascript jquery html jquery-ui-sortable

我有一些列表,我允许使用sortable.js重新排列,我需要在拖动完成时创建一个排序顺序数组。 HTML如下:

<div id="catscontainer">
    <div id="parentcat1" class="parentcatcontainer">
    <h4 class="parentcathead">Parent Category One</h4>
    <ul class="subcatlist" id="ul-parentcat1">
        <li id="parentcat1-subcat1">Sub Category One</li>
        <li id="parentcat1-subcat2">Sub Category Two</li>
        <li id="parentcat1-subcat3">Sub Category Three</li>
    </ul>
    </div>
    <div id="parentcat2" class="parentcatcontainer">
    <h4 class="parentcathead">Parent Category Two</h4>
    <ul class="subcatlist" id="ul-parentcat2">
        <li id="parentcat2-subcat1">Sub Category One</li>
        <li id="parentcat2-subcat2">Sub Category Two</li>
        <li id="parentcat2-subcat3">Sub Category Three</li>
    </ul>
    </div>
</div>

我一直在使用以下可排序代码:

var sortySubCats = Sortable.create(el, {
    group: 'titles',
    animation: 150,
    dataIdAttr: 'id',
    onUpdate: function( /**Event*/ evt) {
        var orderListSub = sortySubCats.toArray();
    }
}

这导致了一个数组orderListSub,它只输出与之交互的父类别中的项目列表。这很好,但不适合我的目的。在mySQL中,我存储了整个层次结构的数组的序列化版本。这个结构对于这个问题来说是多余的,但我确实需要在每次拖动完成后按顺序输出以下内容:

Parent Category ID
> Sub Category ID
> Sub Category ID
> Sub Category ID
Parent Category ID
> Sub Category ID
> Sub Category ID
> Sub Category ID
etc...

进入我可以序列化的数组。目前我正在寻找通过catcontainer div的每个UL迭代id名称,并在其中为LI id名称进行子迭代。这应该按顺序返回。有没有一种特别干净的方法通过jquery这样做,或者实际上可以实现比我经历过的更好的实现这个功能吗?

更新

我已经使用以下简单的jquery来按照与拖动后的外观匹配的顺序捕获列表的父元素和子元素的ID。似乎是最直接的方式,我可以添加一些代码将其转换为我需要的数组。如果没有更好的建议,我会将其添加为答案。

function catsToArrayJSON() { // called after drag complete
    $("#catscontainer ul").each(function () {
        console.log('Parent is: ' + this.id);
        $(this).children("li").each(function () {
            console.log('Child is: ' + this.id);
        })
    });
}

1 个答案:

答案 0 :(得分:0)

我已经使用以下简单的jquery来按照与拖动后的外观匹配的顺序捕获列表的父元素和子元素的ID。似乎是最直接的方式,我可以添加更多代码将其转换为我需要的数组。

function catsToArrayJSON() { // called after drag complete
    $("#catscontainer ul").each(function () {
        console.log('Parent is: ' + this.id);
        $(this).children("li").each(function () {
            console.log('Child is: ' + this.id);
        })
    });
}