75 votes

Comment obtenir tous les ID avec jQuery ?

J'essaie de rassembler une liste (tableau) d'identifiants dans un secteur.

<div id="mydiv">
 <span id='span1'>
 <span id='span2'>
</div>

$("#mydiv").find("span"); 

me donne un objet jQuery, mais pas un vrai tableau ;

Je peux le faire.

var array = jQuery.makeArray($("#mydiv").find("span"));

et ensuite utiliser une boucle for pour mettre les attributs id dans un autre tableau

ou je peux faire

$("#mydiv").find("span").each(function(){}); //but i cannot really get the id and assign it to an array that is not with in the scope?(or can I)

Quoi qu'il en soit, je veux juste voir s'il y a un raccourci dans jQuery pour faire ça ;

163voto

Shog9 Points 82052

//mais je ne peux pas vraiment récupérer l'id et l'assigner à un tableau qui n'est pas dans le scope ?(ou puis-je)

Si, vous le pouvez !

var IDs = [];
$("#mydiv").find("span").each(function(){ IDs.push(this.id); });

C'est la beauté de fermetures .

Notez que pendant que vous étiez sur la bonne voie, sighohwell y cletus Tous deux indiquent des moyens plus fiables et plus concis d'y parvenir, en tirant parti de l'expérience de l'UE. filtres d'attributs (pour limiter les éléments correspondants à ceux qui ont un ID) et la fonction intégrée de jQuery map() fonction :

var IDs = $("#mydiv span[id]")         // find spans with ID attribute
  .map(function() { return this.id; }) // convert to set of IDs
  .get(); // convert to instance of Array (optional)

0 votes

Oui, je n'ai pas utilisé un vrai tableau parce que techniquement, tu peut mettre des ID en double dans le html même si c'est totalement faux de faire ça.

0 votes

@Deviant : vrai (bien que si vous faites cela, vous avez rendu les IDs plutôt inutiles...) Une autre raison pour laquelle mon exemple n'est pas adapté au code de production est simplement qu'il ne fait aucun filtrage des éléments - si Roy a des espaces sans IDs, il se retrouvera avec des éléments vides dans le tableau.

0 votes

J'utilise cette fonction pour obtenir uniquement les variables uniques (au diable les identifiants en double, ils ne fonctionneront pas de toute façon à la deuxième occurrence). $.unique($('[id]').map(function() { return this.id; }).get()); En l'enveloppant dans $.unique, il est bien filtré et votre code reste propre :-)

38voto

John Foster Points 5411

La méthode .get() renvoie un tableau à partir d'un objet jQuery. En outre, vous pouvez utiliser .map pour projeter vers quelque chose avant d'appeler get().

var idarray = $("#myDiv")
             .find("span") //Find the spans
             .map(function() { return this.id; }) //Project Ids
             .get(); //ToArray

0 votes

Je te dois un café, mon pote !

13voto

cletus Points 276888

Ma suggestion ?

var arr = $.map($("#mydiv [id]"), function(n, i) {
  return n.id;
});

vous pourriez aussi le faire en tant que :

var arr = $.map($("#mydiv span"), function(n, i) {

o

var arr = $.map($("#mydiv span[id]"), function(n, i) {

ou même simplement :

var arr = $("#mydiv [id]").map(function() {
  return this.id;
});

Beaucoup de façons de faire, en fait.

7voto

gnarf Points 49213

La meilleure façon de répondre à cette question est de créer un plugin jquery personnalisé pour faire cela :

jQuery.fn.getIdArray = function() {
  var ret = [];
  $('[id]', this).each(function() {
    ret.push(this.id);
  });
  return ret;
};

Ensuite, faites quelque chose comme

var array = $("#mydiv").getIdArray();

6voto

Cihad Turhan Points 558

C'est une réponse tardive mais il y a maintenant un moyen facile. La version actuelle de jquery vous permet de rechercher si l'attribut existe. Par exemple

$('[id]')

vous donnera tous les éléments s'ils ont un identifiant. Si vous voulez toutes les travées dont l'id commence par span vous pouvez utiliser

$('span[id^="span"]')

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