Je vous suggère de faire pas utiliser les solutions qui utilisent un <span>
car il ne s'agit pas d'un code HTML valide, ce qui pourrait causer des problèmes par la suite. Je pense que la meilleure solution est de supprimer toutes les options que vous souhaitez masquer, et de les restaurer si nécessaire. En utilisant jQuery, vous n'aurez besoin que de ces 3 fonctions :
La première fonction permet de sauvegarder le contenu original du fichier sélectionnez . Par sécurité, vous pouvez appeler cette fonction lorsque vous chargez la page.
function setOriginalSelect ($select) {
if ($select.data("originalHTML") == undefined) {
$select.data("originalHTML", $select.html());
} // If it's already there, don't re-set it
}
La fonction suivante appelle la fonction ci-dessus pour s'assurer que le contenu original a été sauvegardé, puis supprime simplement les options du DOM.
function removeOptions ($select, $options) {
setOriginalSelect($select);
$options.remove();
}
La dernière fonction peut être utilisée chaque fois que vous voulez "réinitialiser" toutes les options d'origine.
function restoreOptions ($select) {
var ogHTML = $select.data("originalHTML");
if (ogHTML != undefined) {
$select.html(ogHTML);
}
}
Notez que toutes ces fonctions s'attendent à ce que vous transmettiez des éléments jQuery. Par exemple :
// in your search function...
var $s = $('select.someClass');
var $optionsThatDontMatchYourSearch= $s.find('options.someOtherClass');
restoreOptions($s); // Make sure you're working with a full deck
removeOptions($s, $optionsThatDontMatchYourSearch); // remove options not needed
Voici un exemple concret : http://jsfiddle.net/9CYjy/23/
5 votes
Au lieu de cacher et d'afficher sur une recherche. Essayez de remplir la sélection en fonction de la recherche.
1 votes
Je suis d'accord avec Henesnarfel. Si vous êtes déjà en train de faire une recherche ou une sorte de requête, vous devriez être en mesure de remplir ceux que vous voulez.
1 votes
ce fonctionne bien pour moi dans Chrome 16.0.912.77 m. Est-ce que je comprends mal le problème ?
3 votes
@mgibsonbr Cela ne fonctionne pas avec tous les navigateurs.
3 votes
@Henesnarfel Il peut y avoir de bonnes raisons de masquer les options. Par exemple, j'avais une page avec une liste de sélection et des liens pour masquer ou afficher les éléments marqués comme inactifs. Il n'y a aucune raison de conserver plusieurs listes ou d'interroger le serveur pour obtenir une nouvelle liste chaque fois que l'utilisateur modifie cette option.
0 votes
@Jasper oh, vous avez raison ! L'OP a mentionné Chrome, donc j'ai testé sur Chrome et Firefox, et j'ai supposé que cela fonctionnerait ailleurs. Mais ça a vraiment échoué sur Safari, Opera et IE6...
0 votes
En utilisant jquery, ayez une copie de toutes les options dans masterVariable et tempVariable. Supprimez les balises d'options indésirables de tempVariable. Lorsque vous souhaitez afficher un autre ensemble de balises d'option, il suffit d'affecter le contenu de masterVariable à tempVariable et de supprimer à nouveau les balises d'option de tempVariable. Cette logique fonctionne dans tous les navigateurs.