JSFiddle - React, Tailwind, and code Playground

by khamer

HTML

<div class="excerpt">
    <h2>Title</h2>
    <div class="expand" data-show="Show">Hide</div>
    <p class="detail">
        Some details that will start hidden.
    </p>
</div>

<div class="excerpt">
    <h2>Title</h2>
    <div class="expand" data-show="Show">Hide</div>
    <p class="detail">
        Some details that will start hidden.
    </p>
</div>

<div class="excerpt">
    <h2>Title</h2>
    <div class="expand" data-show="Show">Hide</div>
    <p class="detail">
        Some details that will start hidden.
    </p>
</div>

CSS

div, p, h2 {
    border: 1px solid #ccc;
    padding: 10px;
    margin: 10px;
}

JavaScript

(function($) {
    $.fn.showHide = function(controls, contents) {
        this.each(function() {
            var container = $(this);
            var control   = container.find(controls);
            var content  = container.find(contents);

            control.data('hide-text', control.text());

            control.click(function() {
                if (content.is(':visible')) {
                    $(this).text(
                        $(this).data('hide-text')
                    );
                    content.slideUp();
                } else {
                    $(this).text(
                        $(this).attr('data-show')
                    );
                    content.slideDown();
                }
            });

            content.hide();
        });
    };
})(jQuery);

$(function() {
    $('.excerpt').showHide('.expand', '.detail');
});