实现Tree View的最佳方法是什么?

时间:2012-07-09 06:20:35

标签: javascript jquery css html-lists

我正在使用嵌套的ul li标签构建Tree View,如下所示:

    <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>

我希望列表项在单元格中可单击时,如下所示在树视图中导航:

enter image description here

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

 <li onClick="redicrectPage(url)">

并添加event.cancelBubble = true以避免在点击子项时触发父事件。

我的问题是,有关上述实施的更好的跨浏览器解决方法吗?

先谢谢你。

1 个答案:

答案 0 :(得分:1)

您可以单独在CSS中创建嵌套菜单结构,这将消除冒泡问题。 http://jsfiddle.net/steveukx/HfDBA/处的示例使用直接后代选择器来重复相同的选择器而无需知道菜单的深度,但如果您支持不具有此功能的浏览器,则应将HTML更改为添加类以命名树中的深度,并在CSS中指定它们。

HTML:

<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>​

CSS

* { 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; }