Comment utiliser jQuery pour sélectionner tous les enfants sauf un élément select
j'ai un div (disons que l'id est "conteneur"), avec de nombreux éléments, y compris un élément select. J'aimerais Sélectionner tout ce qui est dans la div, sauf le select. Choses que j'ai essayé:
$("#container *:not(select)")
$("#container *:not(#selectorid)")
//put a div around the select and...
$("#container *:not(#selectorcontainer)")
$("#container *:not(#selectorcontainer *)")
$("#container *:not(#selectorcontainer, #selectorcontainer *)")
a également essayé sans sélection descendante wildcard, donc comme tous les ci-dessus, mais
$("#container:not(#selectorid)")
7 réponses
vous pouvez simplement omettre le Joker car il est optionnel dans ce cas, mais garder l'espace:
$('#container :not(select)');
alternativement, utiliser le .Non () méthode pour filtrer le select après avoir sélectionné Tous les enfants:
$('#container').children().not('select');
si votre problème est que les enfants de select
sont toujours inclus, vous pouvez explicitement filtrer ceux avec le .Non () méthode:
$('#container').children().not('select, option, optgroup');
ou sélectionnez enfants seulement:
$('#container > :not(select)');
vous pouvez essayer les sélecteurs jQuery à le testeur de sélecteur de jQuery interactif pour une rétroaction Rapide; Essayez par exemple div :not(ol)
ou div > :not(ol)
pour avoir une idée de quelle différence fait le sélecteur direct child ( >
).
vous pouvez également l'essayer en utilisant des méthodes de traversée:
$('#container').children().not('#selectorId');
ou d'être une dernière option:
$('#container').children().filter(function(){
return $(this).attr('id') !== 'selectorId';
}
utilisant :not
, et .not()
pour sélectionner et filtrer " Live Demo
Le :not(selector)
fait exactement cela, et il est livré dans un couple de styles. Vous pouvez utiliser le sélecteur , ou la méthode . Voici un exemple d'utilisation du sélecteur:
$("#container :not(select)");
ce sera correspondre à tout enfant dans #container
qui est Non un <select>
élément. Ensuite, nous avons la méthode de l'exclusion, qui porte le même nom, mais doit être gérée différemment:
$("#container").children().not("select");
ceci va à l'encontre du children
des éléments assortis. Dans ce cas, .not
Sert de filtre. Ce qui m'amène à l'exemple suivant, en utilisant .filter()
pour obtenir les résultats que vous voulez. Avec cette méthode, nous pouvons fournir notre propre fonction personnalisée pour fouiller les résultats et choisissez ceux que nous voulons:
utilisant .filter()
pour filtrer les éléments assortis " Live Demo
$( "#container" ).children().filter( isNotSELECT ).fadeTo( "slow", .5 );
function isNotSELECT () {
// Returns TRUE if element is NOT select
return !$(this).is("select");
}
dans cet exemple, nous sélectionnons tous les enfants de #container
, puis nous les passons à travers un filtre que nous avons défini appelé"isNotSelect". Dans notre filtre, nous retournons soit true
ou false
pour chaque élément. Si nous retournons true
, cet élément sera retourné au résultat définir. Si nous retournons false
, cet élément sera supprimé du jeu de résultats. Nous nous demandons si l'élément est pas . Ceci retournera false
pour tous les éléments sélectionnés, les retirant ainsi de notre collection.
il n'est pas clair ce que vous voulez réellement de votre question. :pas de sélection de filtre l'sélectionner les descendants mais il ne sera pas le sélectionner descendants. Si c'est votre problème, essayez le suivant
$("#container *").filter( function(){
return $(this).closest('select').length === 0
})
JQuery cliquez sur gestionnaire pour tout, mais un certain objet
Deux approches au problème: celle avec 8 votes est probablement celle que vous recherchez.
peut-être que cela peut vous aider où 3 est le #select
essayez l'une de celles-ci:
$("#container *:not(eq(3))");
$("#container").children().filter(:not(eq(3)));