JSFiddle - React, Tailwind, and code Playground
HTML
<script src="http://code.jquery.com/mobile/1.3.0/jquery.mobile-1.3.0.min.js"></script>
<link rel="stylesheet" href="http://code.jquery.com/mobile/1.3.0/jquery.mobile-1.3.0.min.css">
<div data-role="navbar" id="navbar">
<ul>
<li id="1"><a>Item 1</a></li>
<li id="2"><a>Item 2</a></li>
<li id="3"><a>Item 3</a></li>
</ul>
</div>
<h2>Hide</h2>
<div data-role="controlgroup" data-type="horizontal" id="hide">
<button>1</button>
<button>2</button>
<button>3</button>
</div>
<h2>Show</h2>
<div data-role="controlgroup" data-type="horizontal" id="show">
<button>1</button>
<button>2</button>
<button>3</button>
</div>
JavaScript
$("#hide button").click(function(){
var $el = $(this);
var index = $el.text();
$("#"+index).hide();
refreshNavbar($("#navbar"));
});
$("#show button").click(function(){
var $el = $(this);
var index = $el.text();
$("#"+index).show();
refreshNavbar($("#navbar"));
});
function refreshNavbar(el) {
var ul = el.children("ul"),
childCount = 0, cls, visibleEl,
children = ul.children("li"),
clsList = ["ui-grid-solo","ui-grid-a","ui-grid-b","ui-grid-c","ui-grid-d","ui-grid-duo"],
clsArr = ["ui-grid-solo","ui-grid-a","ui-grid-b","ui-grid-c","ui-grid-d","ui-grid-duo ui-grid-a"];
for (var i = 0, j = children.length; i < j; i++) {
child = $(children[i]);
if ($(child).is(":visible")) {
childCount++;
}
}
cls = clsArr[childCount-1];
if (childCount == 1) {
visibleEl = ul.children("li:visible");
if (!visibleEl.hasClass("ui-block-a")) {
visibleEl.addClass("ui-block-a");
}
} else {
ul.children("li").removeClass("ui-block-a");
ul.children("li:first").addClass("ui-block-a");
}
//remove existing grid class
var rx = new RegExp(clsList.join("|"), "gi");
var oldCls = ul.attr("class").replace(rx, function (matched) {
return "";
});
//set new grid class, preserving existing custom clases
ul.attr("class", oldCls + " "+ cls);
}