我不会编写所有的香草 JS 代码,特别是因为你没有明确禁止暗示 jquery 的建议——所以这里的一切都是通用的。这是我将如何处理它:
1)适用于所有“togglable” div,要么是“togglediv”类,要么是数据属性元素(在大多数情况下,在分配动态功能时,我更喜欢使用数据属性元素的方式,但在这种情况下是类可能更可取)。
2) 在 doc-load 上,获取所有这些 div 并将它们存储在一个数组中。
3)一旦你有了你的数组,循环遍历它并将指向“toggle”函数的onclick应用到数组中的每个div。
4) 切换函数应首先循环遍历该 div 数组,并将“关闭”类应用于每个元素。您可以使用 CSS 将 display:none 应用于所有分类为“.togglediv.closed”的 div。“.togglediv”类本质上应该是可见的。之后,它确保目标 div 没有应用“封闭”类。
5) 将 onkeypress 事件应用于调用“toggle”函数的文档正文(或可能的最具体的元素,例如您的包装器,如果有的话)。如果您正确编写“切换”功能,如果没有元素通过它知道循环中的 CLOSE ALL DIVS 的事件传递给它,那么您的转义键功能已经内置。
这个伪代码应该足以让你开始。如果您需要更多帮助,请告诉我。
Protip:在这里使用“渐进式增强”是一件轻而易举的事-在此代码的文档加载部分中,请确保在获取该数组时循环该数组并将它们全部设置为“关闭”(或隐藏或您想要的任何类)以便它们默认隐藏。不要在隐藏状态下加载带有这些元素的文档,因为没有 JS 的用户会看到一个损坏的站点(booooooo!) - 相反,一旦您使用 javascript 加载了文档(yaaaay!),使用渐进增强来隐藏 div
干杯!