Я пытаюсь реализовать запасной вариант jQuery для элемента details
.Если вы никогда не слышали об этом, это в основном виджет Раскрытия .Если логический атрибут 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 для добавления / удаления атрибута open
при нажатии на элемент summary
.
jQuery
$("summary").click(function() {
if ($(this).parent().attr("open")) {
$(this).parent().removeAttr("open");
} else {
$(this).parent().attr("open", "open");
}
});
Добавляет и удаляет open
атрибута, однако видимость элемента p
остается неизменной в Chrome.Что я делаю неправильно?Вот живой пример .
Обновления
- Работает в Firefox 4.
- manjii указал, что
open
следует изменить на open="open"
, иначе он не будет работать с первого раза. BoltClock также предоставил альтернативное решение.Однако это не главная проблема. - marcosfromero и BoltClock подняли вопрос о поддержке динамических стилей Chrome, который, я думаю, может быть связан.