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)")
49
demandé sur Shawn J. Goff 2009-07-14 18:19:23

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 ( > ).

72
répondu Martijn Pieters 2009-07-14 15:19:11

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';
}
4
répondu Jeff 2009-07-14 14:55:31

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.

4
répondu Sampson 2012-05-26 15:48:43
$(#container select).siblings()

http://docs.jquery.com/Traversing/siblings

2
répondu Mike Kormendy 2012-05-18 04:07:36

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

Démo

$("#container *").filter( function(){ 
    return $(this).closest('select').length === 0 
})
1
répondu redsquare 2009-07-14 15:09:58

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.

1
répondu Dirk 2017-05-23 12:09:17

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)));
1
répondu adardesign 2013-12-06 01:43:01