JSFiddle - React, Tailwind, and code Playground

HTML

<ul id="navigation" class="treeview">
    <li>
        <span>Marketing</span>
        <ul>
            <li>
                <span>Joysticks</span>
                <ul>
                    <li>
                        <span>Intel</span>
                    </li>
                    <li>
                        <span>Microsoft</span>
                    </li>
                    <li>
                        <span>Sony</span>
                    </li>
                </ul>
            </li>
            <li>
                <span>Laptops</span>
                <ul>
                    <li>
                        <span>Apple</span>
                        <ul>
                            <li>
                                <span>iMac</span>
                            </li>
                            <li>
                                <span>MacBook Air</span>
                            </li>
                            <li>
                                <span>MacBook Pro</span>
                            </li>
                            <li>
                                <span>Accessories</span>
                            </li>
                        </ul>
                    </li>
                    <li>
                        <span>Dell</span>
                        <ul>
                            <li>
                                <span>Inspiron</span>
                            </li>
                            <li>
                                <span>XPS</span>
                            </li>
                        </ul>
                    </li>
                    <li>
                        <span>Sony</span>
                    </li>
                </ul>
            </li>
            <li>
                <span>Phones</span>
                <ul>
                    <li>
                        <span>LG</span>
                    </li>
                    <li>
                        <span>Motorola</span>
                    </li>
   ...

CSS

.treeview, .treeview ul { 
    padding: 0;
    margin: 0;
    list-style: none;
}

.treeview ul {
    background-color: white;
    margin-top: 4px;
}

.treeview .hitarea {
    background: url(images/treeview-default.gif) -64px -25px no-repeat;
    height: 16px;
    width: 16px;
    margin-left: -16px;
    float: left;
    cursor: pointer;
}
/* fix for IE6 */
* html .hitarea {
    display: inline;
    float:none;
}

.treeview li { 
    margin: 0;
    padding: 3px 0pt 3px 16px;
}

.treeview a.selected {
    background-color: #eee;
}

#treecontrol { margin: 1em 0; display: none; }

.treeview .hover { color: red; cursor: pointer; }

.treeview li { background: url(images/treeview-default-line.gif) 0 0 no-repeat; }
.treeview li.collapsable, .treeview li.expandable { background-position: 0 -176px; }

.treeview .expandable-hitarea { background-position: -80px -3px; }

.treeview li.last { background-position: 0 -1766px }
.treeview li.lastCollapsable, .treeview li.lastExpandable { background-image: url(images/treeview-default.gif); }  
.treeview li.lastCollapsable { background-position: 0 -111px }
.treeview li.lastExpandable { background-position: -32px -67px }

.treeview div.lastCollapsable-hitarea, .treeview div.lastExpandable-hitarea { background-position: 0; }

.treeview-red li { background-image: url(images/treeview-red-line.gif); }
.treeview-red .hitarea, .treeview-red li.lastCollapsable, .treeview-red li.lastExpandable { background-image: url(images/treeview-red.gif); } 

.treeview-black li { background-image: url(images/treeview-black-line.gif); }
.treeview-black .hitarea, .treeview-black li.lastCollapsable, .treeview-black li.lastExpandable { background-image: url(images/treeview-black.gif); }  

.treeview-gray li { background-image: url(images/treeview-gray-line.gif); }
.treeview-gray .hitarea, .treeview-gray li.lastCollapsable, .treeview-gray li.lastExpandable { background-image: url(images/treeview-gray.gif); } 

.treeview-famfamfam li { background-image:...

JavaScript

;(function($) {

    // TODO rewrite as a widget, removing all the extra plugins
    $.extend($.fn, {
        swapClass: function(c1, c2) {
            var c1Elements = this.filter('.' + c1);
            this.filter('.' + c2).removeClass(c2).addClass(c1);
            c1Elements.removeClass(c1).addClass(c2);
            return this;
        },
        replaceClass: function(c1, c2) {
            return this.filter('.' + c1).removeClass(c1).addClass(c2).end();
        },
        hoverClass: function(className) {
            className = className || "hover";
            return this.hover(function() {
                $(this).addClass(className);
            }, function() {
                $(this).removeClass(className);
            });
        },
        heightToggle: function(animated, callback) {
            animated ?
                this.animate({ height: "toggle" }, animated, callback) :
                this.each(function(){
                    jQuery(this)[ jQuery(this).is(":hidden") ? "show" : "hide" ]();
                    if(callback)
                        callback.apply(this, arguments);
                });
        },
        heightHide: function(animated, callback) {
            if (animated) {
                this.animate({ height: "hide" }, animated, callback);
            } else {
                this.hide();
                if (callback)
                    this.each(callback);
            }
        },
        prepareBranches: function(settings) {
            if (!settings.prerendered) {
                // mark last tree items
                this.filter(":last-child:not(ul)").addClass(CLASSES.last);
                // collapse whole tree, or only those marked as closed, anyway except those marked as open
                this.filter((settings.collapsed ? "" : "." + CLASSES.closed) + ":not(." + CLASSES.open + ")").find(">ul").hide();
            }
            // return all items with sublists
            return this.filter(":has(>ul)");
        },
  ...