Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/468.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
Javascript 实现树状视图的最佳方法是什么?_Javascript_Jquery_Css_Html Lists - Fatal编程技术网

Javascript 实现树状视图的最佳方法是什么?

Javascript 实现树状视图的最佳方法是什么?,javascript,jquery,css,html-lists,Javascript,Jquery,Css,Html Lists,我正在使用嵌套的ul li标记构建树视图,如下所示: <ul> <li>Level 1 a <ul> <li>Level 2 a</li> <li>Level 2 b <ul> <li>Level 3 a

我正在使用嵌套的ul li标记构建树视图,如下所示:

    <ul>
        <li>Level 1 a
            <ul>
                <li>Level 2 a</li>
                <li>Level 2 b
                    <ul>
                        <li>Level 3 a</li>
                        <li>Level 3 b</li>
                    </ul>
                </li>
            </ul>
        </li>
        <li>Level 1 b</li>
    </ul>
  • 一级甲
    • 二级甲
    • 二级乙
      • 三级甲
      • 三级乙
  • 一级乙
我希望在树视图中导航时,列表项可以在单元格上单击,如下所示:

我知道我们可以在列表项上添加JavaScript函数,如下所示:

 <li onClick="redicrectPage(url)">
  • 并添加
    event.cancelBubble=true
    ,以避免在单击子项时触发父事件

    我的问题是,在上面的实现上有没有更好的跨浏览器解决方案


    感谢您的高级支持。

    您可以单独在CSS中创建嵌套菜单结构,这将消除冒泡问题。在的示例中,使用直系子代选择器可以重复相同的选择器,而无需知道菜单的深度,但如果您支持不具备此功能的浏览器,则应更改HTML以添加类,在树中命名深度,并在CSS中指定深度

    HTML:

    谷歌搜索“jquery菜单示例”产生了很多有用的信息,你可以在每个“li”标记中放置一个“”而不仅仅是“Node title”,但这不会执行子菜单之间的导航,这是大多数jquery treeview插件所做的。例如,您可以查看jsTree、dynatree。。。
    <ul class="menu">
        <li><a href="#">Level 1 a</a>
            <ul>
                <li><a href="#">Level 2 a</a></li>
                <li><a href="#">Level 2 b</a>
                    <ul>
                        <li><a href="#">Level 3 a</a></li>
                        <li><a href="#">Level 3 b</a></li>
                    </ul>
                </li>
            </ul>
        </li>
        <li><a href="#">Level 1 b</a></li>
    </ul>​
    
    * { font-family: tahoma, sans-serif; font-size: 10pt; }
    a { text-decoration: none; color: #fff; display: block; }
    ul { display: none; }
    ul.menu, li:hover > ul { display: block; }
    li > ul { position: absolute; top: 25%; left: 100%; margin-left: -1em; 
       box-shadow: -1px 1px 1px rgba(0,0,0,0.5); z-index: 1000; }
    li { position: relative; padding: 0.1em 0.5em; width: 100px; background: silver;
       box-shadow: -1px 1px 1px rgba(0,0,0,0.5); margin: 1px 1px 0; }
    li:hover { background-color: #333; }
    li:hover > a { color: #FAFAFE; }