I'm trying to implement a jQuery fallback for the details
element. If you've never heard about it, it is basically a Disclosure widget. If the boolean attribute open
is present, it indicates that both the summary and the additional information is to be shown to the user. If the attribute is absent, only the summary is to be shown. The following HTML and CSS achieve that.
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;
}
I then added the following jQuery to add/remove the open
attribute when the summary
element is clicked.
jQuery
$("summary").click(function() {
if ($(this).parent().attr("open")) {
$(this).parent().removeAttr("open");
} else {
$(this).parent().attr("open", "open");
}
});
It adds and removes the open
attribute, however the p
element's visibility remains unaffected in Chrome. What am I doing wrong? Here is a live example.
Updates
- It works in Firefox 4.
- manjii pointed out that
open
should be changed toopen="open"
or it will not work the first time. BoltClock also provided an alternative solution. This is not the main issue though. - marcosfromero and BoltClock brought up the issue of Chrome's dynamic styles support, which I think could be related.