J'ai implémenté une solution en utilisant une fonction qui filtre une combobox ( <select>) basée sur des attributs de données personnalisés. Cette solution prend en charge:
- Avoir un <option>pour montrer quand le filtre laisserait la sélection vide.
- Respecte les attributs sélectionnés existants.
- <option>les éléments sans l'attribut data-filter ne sont pas modifiés.
Testé avec jQuery 2.1.4 et Firefox, Chrome, Safari et IE 10+.
Voici l'exemple HTML:
<select id="myCombobox">
  <option data-filter="1" value="AAA">Option 1</option>
  <option data-filter="1" value="BBB">Option 2</option>
  <option data-filter="2" value="CCC">Option 3</option>
  <option data-filter="2" value="DDD">Option 4</option>
  <option data-filter="3" value="EEE">Option 5</option>
  <option data-filter="3" value="FFF">Option 6</option>
  <option data-filter-emptyvalue disabled>No Options</option>
</select>
Le code jQuery pour le filtrage:
function filterCombobox(selectObject, filterValue, autoSelect) {
  var fullData = selectObject.data("filterdata-values");
  var emptyValue = selectObject.data("filterdata-emptyvalue");
  // Initialize if first time.
  if (!fullData) {
    fullData = selectObject.find("option[data-filter]").detach();
    selectObject.data("filterdata-values", fullData);
    emptyValue = selectObject.find("option[data-filter-emptyvalue]").detach();
    selectObject.data("filterdata-emptyvalue", emptyValue);
    selectObject.addClass("filtered");
  }
  else {
    // Remove elements from DOM
    selectObject.find("option[data-filter]").remove();
    selectObject.find("option[data-filter-emptyvalue]").remove();
  }
  // Get filtered elements.
  var toEnable = fullData.filter("option[data-filter][data-filter='" + filterValue + "']");
  // Attach elements to DOM
  selectObject.append(toEnable);
  // If toEnable is empty, show empty option.
  if (toEnable.length == 0) {
    selectObject.append(emptyValue);
  }
  // Select First Occurrence
  if (autoSelect) {
    var obj = selectObject.find("option[selected]");
    selectObject.val(obj.length == 0 ? toEnable.val() : obj.val());
  }
}
Pour l'utiliser, il vous suffit d'appeler la fonction avec la valeur que vous souhaitez conserver.
filterCombobox($("#myCombobox"), 2, true);
Ensuite, la sélection résultante sera:
<select id="myCombobox">
  <option data-filter="2" value="CCC">Option 3</option>
  <option data-filter="2" value="DDD">Option 4</option>
</select>
Les éléments d'origine sont stockés par la fonction data (), donc les appels suivants ajouteront et supprimeront les éléments corrects.