【发布时间】:2011-09-09 17:21:54
【问题描述】:
我正在尝试为 details 元素实现 jQuery 后备。如果您从未听说过,它基本上是Disclosure widget。如果布尔属性open 存在,则表示要向用户显示摘要和附加信息。如果该属性不存在,则仅显示摘要。下面的 HTML 和 CSS 实现了这一点。
HTML
<!-- opened -->
<details open>
<summary>Summary</summary>
<p>Additional information</p>
</details>
<!-- closed -->
<details>
<summary>Summary</summary>
<p>Additional information</p>
</details>
CSS
details summary ~ * {
display: none;
}
details[open] summary ~ * {
display: block;
}
然后我添加了以下 jQuery 以在单击 summary 元素时添加/删除 open 属性。
jQuery
$("summary").click(function() {
if ($(this).parent().attr("open")) {
$(this).parent().removeAttr("open");
} else {
$(this).parent().attr("open", "open");
}
});
它添加和删除open 属性,但p 元素的可见性在Chrome 中不受影响。我究竟做错了什么?这是live example。
更新
- 它适用于 Firefox 4。
-
manjii 指出
open应该改成open="open"不然第一次就不行了。 BoltClock 也提供了替代解决方案。不过,这不是主要问题。 - marcosfromero 和 BoltClock 提出了 Chrome 的动态样式支持问题,我认为这可能是相关的。
【问题讨论】:
-
p的可见性在您再次单击时确实会发生变化,因此它只会在第一次单击时中断。 -
@BoltClock 它在 Firefox 4 中发生了变化,但在 Chrome 中没有。我编辑了问题以指出这一点。
标签: jquery html google-chrome css