如何在MySQL数据库中存储多级ul列表?

时间:2012-11-30 13:15:13

标签: php jquery mysql list store

我有一个很长的,至少有5级<ul>列表,我已从mysql数据库中列出。用户有机会对项目进行排序,将一个项目从一个列表中删除到另一个列表,重命名或删除。然后保存。

我使用PHP进行列表,使用Javascript / Jquery重新排列项目。

我的问题是将ul li元素拆分成数组的最佳方法是什么?拥有每个元素的父ID很重要。

非常简化的示例代码:

<a href="#">Parent item name</a>
<ul data-level='0'>
    <li>
        <a href="#">Child item name</a>
        <ul data-level='1'>
            <li><a href="#">2nd level item 1</a></li>
            <li><a href="#">2nd level item 2</a></li>
            <li><a href="#">2nd level item 3</a></li>
            <li><a href="#">2nd level item 4</a></li>
        </ul>
    </li>
</ul>

结果,“第二级项目2”应该有它的父项'子项名称'(它的id存储在它名称旁边的隐藏输入字段中)。

列表可以是任何级别,因为用户也可以添加其他级别。代码也必须处理15级别的列表。

我正在考虑通过javascript获取每个<li>元素中隐藏输入的值。 JQuery能够获得孩子的数量。但这似乎不是最好的解决方案。

2 个答案:

答案 0 :(得分:0)

恕我直言,当点击提交按钮时,你的jquery可以迭代列表并创建JSON对象(每个成员都有父值,0表示root)并使用AJAX发送它。

答案 1 :(得分:0)

这是一个可能的解决方案:

HTML:

<a href="#">Parent item name</a>
<ul class="0" id="level_0_count_0" data-level='0'>
<li>
    <a href="#">Child item name</a>
    <ul class="1" id="level_1_count_0" data-level='1'>
        <li><a href="#">ul 0 2nd level item 1pppppppp</a></li>
        <li><a href="#">ul 0 2nd level item 2pppppppp</a></li>
        <li><a href="#">ul 0 2nd level item 3pppppppp</a></li>
        <li>
            <a href="#">ul 0 2nd level item 4</a>
            <ul class="2" id="level_2_count_0" data-level='1'>
                <li><a href="#">ul 2 3nd level item 1cccccccc</a></li>
                <li><a href="#">ul 2 3nd level item 2cccccccc</a></li>
                <li><a href="#">ul 2 3nd level item 3cccccccc</a></li>
                <li><a href="#">ul 2 3nd level item 4cccccccc</a></li>
            </ul>
        </li>
    </ul>
</li>

<li>
    <a href="#">Child item name</a>
    <ul class="1" id="level_1_count_1" data-level='1'>
        <li><a href="#">ul 1 2nd level item 1</a></li>
        <li><a href="#">ul 1 2nd level item 2</a></li>
        <li><a href="#">ul 1 2nd level item 3</a></li>
        <li><a href="#">ul 1 2nd level item 4</a></li>
    </ul>
</li>

JavaScript:

 var $j = jQuery.noConflict();
$j(document).ready(function() {
var temp = new Array();
find_ul(0, temp);
});


function find_ul(parent_class, new_object_, level_count){
if( $j('.' + parent_class + ' > li > ul').length == 0){
    return new_object_;
}else{
    var current_objs = $j('.' + parent_class + ' > li > ul');
    var i = 0;
    parent_class++;
    $j.each(current_objs, function() {
            var current_ul_id = '';
            var object_lis =  $j('ul#level_' + parent_class + '_count_' + i + ' > li');
            var b = 0;
            var tempora = new Array();
            var current_ul_id = $j(this).attr('id');
            alert(current_ul_id);

           $j.each(object_lis, function() {
               tempora[b] = $j(this).html();
               b++;
               alert($j(this).html());

            });

            new_object_[i] = {ul_id: current_ul_id, lis:tempora};
            i++;

    });
}
   find_ul(parent_class, new_object_);
}

您可以在以下位置查看/测试: http://jsfiddle.net/BsDpY/4/

这将生成一个数组,其中包含每层ul / li

的级别

所以它将首先通过第一级(父母),然后通过其子UL ..

希望有所帮助。