我的菜单设计有dl dt dd
个标签。 ' One',' two' ...是菜单项。 '头'是菜单标题。
<dl>
<dt>Header</dt>
<dd>One</dd>
<dd>Two</dd>
<dd>Three</dd>
<dd>Four</dd>
<dd>Five</dd>
</dl>
我的问题是,如果点击Header
标记,则应隐藏&#39; One&#39;,&#39;两个&#39; ..选项。为此,我在div中添加了dd
个选项。我知道在dl中不允许添加div。我怎么解决这个问题?感谢
<dl>
<dt>Header</dt>
<div id="menuOptions">
<dd>One</dd>
<dd>Two</dd>
<dd>Three</dd>
<dd>Four</dd>
<dd>Five</dd>
</div>
</dl>
答案 0 :(得分:1)
我推荐以下HTML结构:
<dl>
<dt>Header</dt>
<dd>
<ul>
<li>One</li>
<li>Two</li>
<li>Three</li>
<li>Four</li>
<li>Five</li>
</ul>
</dd>
</dl>
您的学期(dd
)应该只有1个定义(dt
)。
答案 1 :(得分:1)
<dl>
标记是三个元素之一<dl>
,<dt>
,<dd>
,用于创建定义列表。即它们不适合创建菜单
试试这个
<ul>
<li></li>
<li></li>
<li></li>
</ul>
答案 2 :(得分:0)
您只需要识别单击的定义术语,然后循环其兄弟姐妹,直到您达到不是定义描述的内容。
例如:
document.querySelector('dl').addEventListener('click', function(e) {
var t = e.target;
var n,
style;
if (t.tagName.toLowerCase() == 'dt') {
n = t.nextElementSibling;
style = n.style.display === "none" ? "block": "none";
while (n) {
console.log(n);
if (n.tagName.toLowerCase() == 'dd') {
n.style.display = style;
} else {
break;
}
n = n.nextElementSibling;
}
}
});
请注意,您的标记不如想法。如果您想要一个菜单项列表以及与其关联的另一个子菜单项列表,则使用嵌套列表(子列表应该在列表项元素中)。