水平下拉菜单

发布于 2024-09-14 02:43:34 字数 3619 浏览 2 评论 0原文

你好,我想创建一个像这样的 html 结构:

<ul class="menu">
    <li class="top"><a></a></li>
    <li><a class="button1"></a></li>
    <li class="extend">
        <a class="button 1"></a>
        <ul>
            <li class="last"><a class="button2"></a></li>
        </ul>
    </li>
    <li class="extend">
        <a class="button1"></a>
        <ul>
            <li><a class="button2"></a></li>
            <li><a class="button3"></a></li>
            <li class="last"><a class="button4"></a></li>
        </ul>
    </li>
    <li><a class="button1"></a></li>
    <li class="last"><a class="button2"></a></li>
</ul>

使用这段代码:

$(document).ready(function(){
    var menuArray = [
    {
        'name':'main 1',
        'className':'main_1'
    },{
        'name':'main 2',
        'group':'group1'
    },{
        'name':'main 3',
        'group':'group1',
     },{
        'name':'main 4',
        'group':'group2'
     },{
        'name':'main5',
        'group':'group2'
    },{
        'name':'button'
    }
];

    var createMenu = function(toolArray){
        var menu = $('<ul class="menu"><li class="top"><a></a></li></ul>').appendTo('body');
        var groupArray = [];

        $.each(toolArray, function(index, value){
            var group = value.group || '';
            var name = value.name || '';
            var elementClass = value.className || '';

            if(typeof(value.group) === 'undefined'){
                console.log('crete button - no group');

                var li = $('<li><a class="'+name+'">'+name+'</a></li>');
                li.click(value.onClick);
                menu.append(li);
            }
            else{
                if(typeof(groupArray[group]) === 'undefined'){//first element in group
                    console.log('create first element in group '+group);
                    groupArray[group] = 1;

                    var li = $('<li class="'+group+'"><a class="'+elementClass+'">'+name+'</a></li>');
                    menu.append(li);
                }
                else{
                    if(groupArray[group] > 1){//third, ... element in group
                        var li = $('<li><a class="'+elementClass+'">'+name+'</a></li>');
                        $('li.'+group+' ul', menu).append(li);
                    }
                    else{//second element in group
                        var li_parent = $('li.'+group, menu).addClass('extend');
                        var ul = $('<ul><li class="'+group+'"><a class="'+elementClass+'">'+name+'</a></li></ul>');
                        $(ul).append(li_parent);
                    }

                    groupArray[value.group] = groupArray[value.group]+1;
                }
            }
        });
    };

    createMenu(menuArray);
    });​

问题是,代码只显示这个:

<ul class="menu">
   <li class="top"><a></a></li>
   <li><a class="main 1">main 1</a></li>
   <li><a class="button">button</a></li>
</ul>

知道为什么吗? http://jsfiddle.net/W4Phv/

Hi I want to create a html structure like this:

<ul class="menu">
    <li class="top"><a></a></li>
    <li><a class="button1"></a></li>
    <li class="extend">
        <a class="button 1"></a>
        <ul>
            <li class="last"><a class="button2"></a></li>
        </ul>
    </li>
    <li class="extend">
        <a class="button1"></a>
        <ul>
            <li><a class="button2"></a></li>
            <li><a class="button3"></a></li>
            <li class="last"><a class="button4"></a></li>
        </ul>
    </li>
    <li><a class="button1"></a></li>
    <li class="last"><a class="button2"></a></li>
</ul>

with this code:

$(document).ready(function(){
    var menuArray = [
    {
        'name':'main 1',
        'className':'main_1'
    },{
        'name':'main 2',
        'group':'group1'
    },{
        'name':'main 3',
        'group':'group1',
     },{
        'name':'main 4',
        'group':'group2'
     },{
        'name':'main5',
        'group':'group2'
    },{
        'name':'button'
    }
];

    var createMenu = function(toolArray){
        var menu = $('<ul class="menu"><li class="top"><a></a></li></ul>').appendTo('body');
        var groupArray = [];

        $.each(toolArray, function(index, value){
            var group = value.group || '';
            var name = value.name || '';
            var elementClass = value.className || '';

            if(typeof(value.group) === 'undefined'){
                console.log('crete button - no group');

                var li = $('<li><a class="'+name+'">'+name+'</a></li>');
                li.click(value.onClick);
                menu.append(li);
            }
            else{
                if(typeof(groupArray[group]) === 'undefined'){//first element in group
                    console.log('create first element in group '+group);
                    groupArray[group] = 1;

                    var li = $('<li class="'+group+'"><a class="'+elementClass+'">'+name+'</a></li>');
                    menu.append(li);
                }
                else{
                    if(groupArray[group] > 1){//third, ... element in group
                        var li = $('<li><a class="'+elementClass+'">'+name+'</a></li>');
                        $('li.'+group+' ul', menu).append(li);
                    }
                    else{//second element in group
                        var li_parent = $('li.'+group, menu).addClass('extend');
                        var ul = $('<ul><li class="'+group+'"><a class="'+elementClass+'">'+name+'</a></li></ul>');
                        $(ul).append(li_parent);
                    }

                    groupArray[value.group] = groupArray[value.group]+1;
                }
            }
        });
    };

    createMenu(menuArray);
    });​

The problem is, that the code only shows this:

<ul class="menu">
   <li class="top"><a></a></li>
   <li><a class="main 1">main 1</a></li>
   <li><a class="button">button</a></li>
</ul>

Any idea why?
http://jsfiddle.net/W4Phv/

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

離人涙 2024-09-21 02:43:34

看起来你已经在这一行中交换了变量:

$(ul).append(li_parent);

应该是

$(li_parent).append(ul);

Looks like you had the variables swapped in this line:

$(ul).append(li_parent);

should be

$(li_parent).append(ul);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文