使用带有奇怪标记的 jQuery 手风琴

Posted

技术标签:

【中文标题】使用带有奇怪标记的 jQuery 手风琴【英文标题】:Using jQuery accordion with strange markup 【发布时间】:2010-09-18 01:52:24 【问题描述】:

我有这个 html 结构,想把它转换成手风琴。

<div class="accor">
    <div class="section">
        <h3>Sub section</h3>
        <p>Sub section text</p>
    </div>
    <div class="section">
        <h3>Sub section</h3>
        <p>Sub section text</p>
    </div>
    <div class="section">
        <h3>Sub section</h3>
        <p>Sub section text</p>
    </div>
</div>

基本上使用h3s 作为手风琴标题,每个div.section 中的其余内容作为每个手风琴面板的内容。 (另请注意:标题可以是 h2 和 h6 之间的任何内容,具体取决于它们的嵌套)。

我认为,如果重组 DOM 树,使 h3s 位于每个 div 之外,这将是最简单的,因为这就是手风琴默认的工作方式:

    <h3>Sub section</h3>
    <div class="section">
        <p>Sub section text</p>
    </div>

唯一的问题是:如何移动标题? (我无权更改 HTML)。

var $sections = $("div.accor > .section"),
    $headings = $sections.find("> :header")
;
// I figured that inserting each heading to be before its parent might
// be the answer:
$headings.insertBefore($headings.find(":parent"));

// ... but that doesn't do anything

【问题讨论】:

【参考方案1】:

啊,我找到了解决办法。

使用$.each()

$headings.each(function(i, el) 
    var $this = $(el), $p = $this.parent();
    $this.insertBefore($p);
);

还有比这更好的解决方案吗?也许只是使用香草手风琴选项?

【讨论】:

【参考方案2】:

这个怎么样:

$('.accor .section').each(function() 
    $('h3', this).insertBefore($(this));
);

【讨论】:

以上是关于使用带有奇怪标记的 jQuery 手风琴的主要内容,如果未能解决你的问题,请参考以下文章

带有 AJAX 的 JQuery 需要用多维数组创建手风琴

带有第一个 div 的 jQuery 自定义手风琴在初始加载时打开 - 修改箭头图像的问题

如何使用 ajax 加载将 jquery 手风琴加载到 div 中?

Jquery 手风琴没有删除类,也没有将其展开文本交换为折叠

iframe中的jquery手风琴在Firefox中不起作用

我无法在 jQuery UI 手风琴内的表单中输入文本