3

我有一个可排序的列表(jQuery UI),格式如下:

<ul class="baseList">
    <li id="3">Item 1
        <ul class="childList">
            <li id="68">Child 1 of Item 1</li>
            <li id="69">Child 2 of Item 1</li>
            <li id="70">Child 3 of Item 1</li>
        </ul>   
    </li>
    <li id="8">Item 2
        <ul class="childList">
            <li id="81">Child 1 of Item 2</li>
            <li id="83">Child 2 of Item 2</li>
        </ul> 
    </li>
</ul>

我想要实现的是获取一个由以下内容组成的数组变量:

var entireList = []; entireList = [[3,[68, 69, 70], 8, [81, 83]]]

所以我可以将该变量发布到 PHP 以在数据库中处理它。

我似乎无法弄清楚如何在 javascript 中解决这个问题。到目前为止,我有以下内容:

var childList = $('.childList, .baseList').sortable({
        placeholder: "ui-state-highlight",
        opacity: 0.6,
        update: function(event, ui){
            var childArray = $('.childList').sortable('toArray');
            var parentsArray = $('.baseList').sortable('toArray');
            for(p in parentsArray)
            {
                postChildData[parentsArray[p]] = childArray;
            }
            console.log(postChildData);
        }
    });

现在这适用于减半,我的结果是: [3: Array[3], 8: Array[3]] 归结为它只需要第一个<li>元素的孩子。

这里有人可以帮我获得一个像我上面写的那样的数组(entireList)吗?

4

3 回答 3

0

而不是childArray在你的 for 循环中使用这个:

$('#' + parentsArray[p] + ' > ul').sortable('toArray');
于 2013-03-07T13:55:52.463 回答
0

它可能不是正确的 css,但给第二个列表一个不同的类名,在这个例子中我给了它 childList2。如果您不想修改 ul 您也可以将差异提升到父 li

    var childArray = [];
    var childArray2 = [];

    $.each(childList, function(children) {
       childArray.push(children);
    });
    $.each(childList2, function(children2) {
       childArray2.push(children2);
     });

如果那不起作用,我应该停止猜测,而无需自己进行测试。你

于 2013-03-07T13:44:00.390 回答
0

好的,我终于找到了解决方案:我需要创建一个新数组,在其中我需要存储父 ID 以及包含子数组的数组。

这样做的方法是将 for 循环替换为以下内容:

for(p in parentsArray)
{
   postListData[p] = Array(parentsArray[p], $('#' + parentsArray[p] + ' > ul').sortable('toArray'));
}
于 2013-03-07T14:55:02.230 回答