【发布时间】:2014-02-11 08:17:49
【问题描述】:
拥有基于 HTML/css/Javascript 的菜单系统。
菜单本身是使用 Javascript 动态构建的,最终结果如下:
<ul>
<li><a href="#"><span class="icon icon-star"> </span></a></li>
<li><a href="#"><span class="icon icon-boat"> </span></a></li>
<li><a href="#"><span class="icon icon-bike"> </span></a></li>
</ul>
我还计划有一个服务器端版本(使用服务器脚本构建菜单)和/或静态版本。当它全部启动并运行时,必须做一些基准测试。
跨度按精灵背景保存图标。
现在,我没有向每个菜单项添加事件侦听器,而是向UL 添加一个事件侦听器,并在单击或按下键时从事件中找到选定的菜单项。通常:
a = event.target;
// Find the LI element.
for (li = a; li && li.nodeName != "LI"; li = li.parentNode)
;
// Find the anchor (Typically if the span was clicked).
if (a.nodeName !== 'A')
for (; a && a.nodeName != "A"; a = a.parentNode)
;
这很好用,但问题变成了如何确定应该采取的行动——比如点击了哪个菜单条目。
可以使用data-标签吗?
通常是这样的:
<a href="#" data-menu="1">...
然后使用switch 例程来确定菜单项。
我最初的想法是使用 ID,但我认为使用 data- 属性更灵活,更不容易发生冲突和并发症。
最初,每个菜单仅附加一个事件侦听器的想法是减少页面加载时的负载,而是在单击菜单条目时进行查找,因为在大多数情况下,当它涉及资源使用。我还需要通过在菜单选择时添加/删除.menu_selected 类来设置LI 元素的样式。
我对整个设计有点不确定。根据我所做的 (few) 测试,它运行良好,但可能有一些我没有看到的警告。
这仅针对浏览器。 HTML5 + 画布。
...现在我不确定这是一个多么好的问题,但我会试一试,如果不合适,我会删除它。
【问题讨论】:
-
当然可以使用
data-*属性,这就是它们的用途。代替switch语句,您可以使用映射并简单地通过键查找函数/操作,例如actions[ele.getAttribute('data-id')]();.
标签: javascript html