我正在开发一个将格式化的 HTML 转换为动态菜单的小脚本。这样做是为了允许表单编写者在不了解太多 JavaScript 的情况下创建动态菜单。这个想法是他们将只编写语义标记,而 javascript 代码将为他们制作菜单。
你可以在这个小提琴中看到演示。
基本上,它采用如下所示的 HTML:
<ul data-menu-horizontal="true" data-menu-width="500px">
<li><a href="index.html">Home</a></li>
<li><a href="index.html">Blog</a></li>
<li><a href="index.html">News</a></li>
<li><a href="index.html">Code</a></li>
<li>
<ul data-menu-horizontal="true" datamenu-header="Sub-Menu 1" data-menu-width="500px">
<li><a href="index.html">Home</a></li>
<li><a href="index.html">Computer Blog</a></li>
<li><a href="index.html">More News</a></li>
</ul>
</li>
<li>
<ul data-menu-vertical="true" data-menu-header="Sub-Menu 2" data-menu-width="500px">
<li><a href="index.html">Home</a></li>
<li><a href="index.html">Computer Blog</a></li>
<li><a href="index.html">More News</a></li>
</ul>
</li>
</ul>
...并将其转换为:
<ul id="13575820577141" class="menu-horizontal" style="width: 500px;">
<li><a href="index.html">Home</a></li>
<li><a href="index.html">Blog</a></li>
<li><a href="index.html">News</a></li>
<li><a href="index.html">Code</a></li>
<li>
<h2 class="menu-horizontal-header">Sub-Menu 1</h2>
<ul id="13575820577142" class="menu-horizontal" style="display: none; position: absolute; width: 500px;">
<li><a href="index.html">Home</a></li>
<li><a href="index.html">Computer Blog</a></li>
<li><a href="index.html">More News</a></li>
</ul>
</li>
<li>
<h2 class="menu-vertical-header">Sub-Menu 2</h2>
<ul id="13575820577143" class="menu-vertical" style="display: none; position: absolute; width: 500px;">
<li><a href="index.html">Home</a></li>
<li><a href="index.html">Computer Blog</a></li>
<li><a href="index.html">More News</a></li>
</ul>
</li>
</ul>
有 jQuery(从makeMenus()
函数开始)将显示/隐藏功能分配给每个菜单和显示/隐藏相应子菜单的ul
菜单标题(标记为)mouseover/mouseout。h2
显示/隐藏功能在我迄今为止测试过的所有浏览器中都非常有效。问题在于,在 IE7 中,“鼠标悬停”功能在遇到任何空白时都会中断,即使在li
元素之间也是如此。我不想简单地删除所有额外的空格,因为需要一些空格来“美化”菜单。