jquery - 为 details 元素实现 jQuery 回退

标签 jquery html google-chrome css

我正在尝试为 details 实现 jQuery 回退元素。如果您从未听说过它,它基本上是一个 Disclosure widget .如果 bool 属性 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还提供了替代解决方案。但这不是主要问题。
  • marcosfromeroBoltClock提出了 Chrome 的动态样式支持问题,我认为这可能是相关的。

最佳答案

原来是报告的WebKit bug here .

Bug 21346 attribute value selector not being reevaluated upon attribute change

添加这个空规则将暂时解决我遇到的问题:

details[open] {}

与错误报告中的描述相反,它似乎发生在使用属性选择器后跟后代组合器时。

不过,Chrome 12 今天发布了,它原生支持 detailssummary 元素。

关于jquery - 为 details 元素实现 jQuery 回退,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6259707/

相关文章:

php - 图片预加载 : how much is too much?

javascript - 如何使用 javascript 制作从链接到 anchor 的滚动动画?

javascript - localStorage什么时候被浏览器清理?

php - 使用 PHP 格式化 SQL 数据并将其插入 HTML(网页)

javascript - 如何在 Javascript 中对句子进行标题大小写

jquery - Chrome 和 Firefox CORS AJAX 调用在某些 Mac 计算机上中止

google-chrome - 为开发者禁用 Chrome 地址栏自动搜索

javascript - jQuery 按名称获取窗口

javascript - 通过 .....javascript/jquery 分割字符串

javascript - 如何将使用 ImageService 提供的图像作为背景的 Canvas 元素转换为可下载图像?