50 votes

Comment utiliser jQuery pour sélectionner tous les enfants sauf un élément select

J'ai un div (disons que l'identifiant est "conteneur") avec de nombreux éléments, y compris un élément select. Je voudrais tout sélectionner dans le div sauf le select. Choses que j'ai essayées:

 $("#container *:not(select)")
$("#container *:not(#selectorid)")

//put a div around the select and...
$("#container *:not(#selectorcontainer)")
$("#container *:not(#selectorcontainer *)")
$("#container *:not(#selectorcontainer, #selectorcontainer *)")
 

Aussi essayé sans sélecteur de descendant générique, donc juste comme tout ce qui précède, mais

 $("#container:not(#selectorid)")
 

74voto

Martijn Pieters Points 271458

Vous pouvez tout simplement omettre le caractère générique comme il est facultatif dans ce cas, mais garder l'espace:

$('#container :not(select)');

Vous pouvez également utiliser l' .pas de() la méthode pour filtrer le sélectionner après la sélection de tous les enfants:

$('#container').children().not('select');

Si votre problème est que les enfants d' select sont toujours inclus, vous pouvez explicitement les filtre avec le .pas de() la méthode:

$('#container').children().not('select, option, optgroup');

ou sélectionnez directement les enfants seulement:

$('#container > :not(select)');

Vous pouvez essayer de sélecteurs jQuery à la interactives sélecteur jQuery testeur rapide de la rétroaction; essayez, par exemple, div :not(ol) ou div > :not(ol) pour avoir une idée de la différence que le direct de l'enfant (>) sélecteur de fait.

4voto

Jonathan Sampson Points 121800

À l'aide de :not, et .not() pour sélectionner et filtrer » Live Demo

L' :not(selector) fait exactement cela, et il est livré dans un couple de styles. Vous pouvez utiliser le sélecteur, ou de la méthode. Ci-dessous est un exemple de l'aide du sélecteur:

$("#container :not(select)");

Cela correspond à tout enfant relevant #container c'est pas un <select> élément. Ensuite, nous avons la méthode de la mode de l'exclusion, qui va par le même nom, mais doit être exécuté de manière différente:

$("#container").children().not("select");

Cela va à l'encontre de l' children des éléments qui correspondent. Dans ce cas, .not agit comme un filtre. Ce qui m'amène à l'exemple suivant, à l'aide de .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 choisir celles que nous voulons:

À l'aide de .filter() pour filtrer les éléments qui correspondent » 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 l' #container, puis de les passer à travers un filtre que nous avons défini appelé "isNotSelect". Au sein de notre filtre, nous les retourner en true ou false pour chaque élément. Si nous revenons true, cet élément devra être retourné à l'ensemble de résultats. Si nous revenons false, cet élément sera supprimé à partir de l'ensemble de résultats. Nous nous demandons si l'élément n'est pas un select. Ce sera le retour de false pour tous les sélectionner des éléments, donc de les retirer de notre collection.

4voto

Jeff Points 2527

Vous pouvez aussi l'essayer en utilisant des méthodes de parcours:

 $('#container').children().not('#selectorId');
 

ou étant une option finale:

 $('#container').children().filter(function(){
    return $(this).attr('id') !== 'selectorId';
}
 

1voto

Dirk Points 1746

http://stackoverflow.com/questions/1109835/quick-html-jquery-question
Deux approches du problème: celle avec 8 votes est probablement celle que vous recherchez.

1voto

redsquare Points 47518

Ce que vous voulez réellement de votre question n'est pas clair. : not (select) va filtrer la sélection de tous les descendants mais pas les descendants de la sélection. Si tel est votre problème, essayez ce qui suit.

Démo

 $("#container *").filter( function(){ 
    return $(this).closest('select').length === 0 
})
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X