Search code examples
jqueryhtmljquery-uiaccordionjquery-ui-accordion

jQuery - Accordion (De-Collapse)


Well, this question is next version of my earlier question.

As I have all links collapsed, I want to create one button OR link saying "Show All", on clicking it will make all links active in accordion i.e. I want to view data of all links. Also need to create one button OR link saying "Hide All" which will make collapsed state as earlier.

Collapsed State

+++++++++++++++++++++++++++++++++++++++
+   Link 1                            +
+   Link 2                            +
+   Link 3                            +
+   Link 4                            +
+++++++++++++++++++++++++++++++++++++++

Should get after clicking "Show All"

+++++++++++++++++++++++++++++++++++++++
+   Link 1                            +
+     Link 1 line 1                   +
+     Link 1 line 2                   +
+     Link 1 line 3                   +
+   Link 2                            +
+     Link 2 line 1                   +
+     Link 2 line 2                   +
+     Link 2 line 3                   +
+   Link 3                            +
+     Link 3 line 1                   +
+     Link 3 line 2                   +
+   Link 4                            +
+     Link 4 line 1                   +
+     Link 4 line 2                   +
+++++++++++++++++++++++++++++++++++++++

How to do this?


Solution

  • Here is your solution to expand and collapse all content panels.

    function expandAll() {
        $('#accordion h3').removeClass('ui-state-default')
            .addClass('ui-state-active')
            .removeClass('ui-corner-all')
            .addClass('ui-corner-top')
            .attr('aria-expanded', 'true')
            .attr('aria-selected', 'true')
            .attr('tabIndex', 0)
        .find('span.ui-icon')
            .removeClass('ui-icon-triangle-1-e')
            .addClass('ui-icon-triangle-1-s')
        .closest('h3').next('div')
            .show();
    
        $('.expand').text('collapse all').unbind('click').bind('click', collapseAll);
    
        $('#accordion h3').bind('click.collapse', function() {
            collapseAll();
            $(this).click();
        });
    }
    
    function collapseAll() {
        $('#accordion h3').unbind('click.collapse');
    
        $('#accordion h3').removeClass('ui-state-active')
                .addClass('ui-state-default')
                .removeClass('ui-corner-top')
                .addClass('ui-corner-all')
                .attr('aria-expanded', 'false')
                .attr('aria-selected', 'false')
                .attr('tabIndex', -1)
            .find('span.ui-icon')
                .removeClass('ui-icon-triangle-1-s')
                .addClass('ui-icon-triangle-1-e')
            .closest('h3').next('div')
                .hide();
    
        $('.expand').text('expand all').unbind('click').bind('click', expandAll);
    
        $('#accordion').accordion('destroy').accordion();
    }
    

    and the fiddle

    http://jsfiddle.net/wa9Dz/1/