2009-05-05 35 views
53

estoy tratando de recopilar una lista (array) de identificadores en un sector¿Cómo obtener todos los ID con jQuery?

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

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

me da un objeto jQuery, pero no una matriz real;

que puedo hacer

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

y luego utilizar un bucle para poner los atributos de identificación en otra matriz

o que pueda hacer

$("#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) 

De todos modos, sólo quiero ver si hay una abreviatura en jQuery para hacer eso;

Respuesta

121

// pero yo no puedo obtener el ID y asignarlo a una matriz que no es con en el alcance? (O puedo)

Sí, puedes!

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

Esta es la belleza de closures.

Tenga en cuenta que mientras estaba en el camino correcto, sighohwell y cletus tanto señalan maneras más fiables y concisas de llevar a cabo esto, aprovechando attribute filters (para limitar los elementos coincidentes con aquellos con los ID) y jQuery incorporado en map() función :

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

sí, yo no utilizo una matriz real, ya que técnicamente * puede * puestos de duplicados de identificación en html a pesar de que es totalmente erróneo hacer que –

+0

@Deviant: cierto (aunque si lo hace, ha hecho que las identificaciones sean un tanto inútiles ...) Otra razón por la que mi ejemplo no es adecuado para el código de producción es simplemente que no filtra elementos: si Roy tiene tramos sin ID, él ' terminaré con elementos vacíos en la matriz. – Shog9

+0

Utilizo esta función para obtener solo las variables únicas (atornillar identificadores duplicados, no funcionarán de todos modos en la segunda ocurrencia) '$ .unique ($ ('[id]'). Map (función() {devolver esto. id;}). get()); 'Al envolverlo en $ .unique se filtra bien manteniendo el código limpio :-) – Tschallacka

3

No es real matriz, pero objs son todas las matrices asociativas en javascript.

Elegí no usar una matriz real con [] y [] .push porque, técnicamente, puede tener varias ID en una página aunque sea incorrecto hacerlo. Por lo que sólo otra opción en caso de que algunos html ha duplicado de Identificación

$(function() { 

     var oArr = {}; 
     $("*[id]").each(function() { 
      var id = $(this).attr('id'); 
      if (!oArr[id]) oArr[id] = true; 
     }); 

     for (var prop in oArr) 
      alert(prop); 

    }); 
7

La mejor manera que puedo pensar para responder a esto es hacer un plugin jQuery costumbre de hacer esto:

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

luego hacer algo como

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

El método .get() devolverá una matriz de un objeto jQuery. Además, puede usar .map para proyectar algo antes de llamar a get()

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

¿Mi sugerencia?

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

también se puede hacer esto como:

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

o

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

o incluso sólo:

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

montón de maneras básicamente.

5

Es una respuesta tardía, pero ahora hay una manera fácil. La versión actual de jquery le permite buscar si el atributo existe. Por ejemplo

$('[id]') 

le dará todos los elementos si tienen id. Si desea que todos los tramos con id empezando por span puede utilizar

$('span[id^="span"]') 
-1
for(i=1;i<13;i++)  
{ 

    alert($("#tdt"+i).val()); 

} 
1

Usted puede obtener los identificadores de las etiquetas specifict y enviarlo a un elemento de annother. Por ejemplo:

$("input").map(function() { 
    $("textarea").append(this.id+"\n"); 
}); 

Obtendrá todos los ID de entrada y lo enviará a textarea.

1

HTML

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

jQuery

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

Intenta agregar un poco de texto explicativo a tus respuestas. – Mike

Cuestiones relacionadas