JSFiddle - React, Tailwind, and code Playground
HTML
<select id='sorty' multiple=true>
<option value="1">Group A</option>
<option value="2">Group B</option>
<option value="3">Group c</option>
<option value="4">Group D</option>
<option value="5">Group D</option>
</select>
<button onclick="HideG('A')">Hide Group A</button>
<button onclick='HideG("B")'>Hide Group B</button>
<button onclick='HideG("C")'>Hide Group C</button>
<button onclick='HideG("D")'>Hide Group D</button>
<button onclick='ShowAll()'>Show ALL</button>
JavaScript
function selectOptionFilter(src,filter,sortBy)
{
if(!$(src).data('hiddenOpts'))
$(src).data('hiddenOpts',[]);
//re-insert while keeping sort order by value or label
$($(src).data('hiddenOpts')).each(function(){
var hiddenOpt=this;
var positioned=false;
$(src).find('option').each(function(i){
if((sortBy=='value' && $(this).attr('value')*1 > $(hiddenOpt).attr('value'))
||
(sortBy=='label' && $(this).text() > $(hiddenOpt).text())
){
$(this).before(hiddenOpt);
positioned=true;
//break
return false;
}
});
//else append
if(!positioned){
$(src).append(hiddenOpt);
}
});
//clean the hidden list
$(src).data('hiddenOpts',[]);
//apply the filter and remove options
if( typeof filter=='function'){
$(src).find('option').filter(filter).each(function(){
$(src).data('hiddenOpts').push($(this).remove());
});
}
}
function HideG(xname){
selectOptionFilter($('#sorty'),function(){
return ( $(this).text().indexOf(xname) > -1);
},'value');
}
function ShowAll(){
selectOptionFilter($('#sorty'),function(){ return false;},'value');
}