2011-02-10 16 views
65

Necesito encontrar todos los elementos que tengan un valor de atributo especial.Encontrar todos los elementos con un cierto valor de atributo en jquery

Aquí está la div Necesito encontrar (no tengo muchos de ellos ..)

<div imageId='imageN'>... 

simplemente necesito colocar a través de los divs que tienen imageId='imageN'

+6

me gustaría recomendar el uso de 'class = "Imagen"' por el bien de HTML válido. O eso o 'data-imageId =" imageN "' por el bien de HTML5 válido. Con el primero, podrías usar el selector de clase. –

+0

Andy, la razón detrás de esto es que estos divs se agregan dinámicamente desde código subyacente y tienen diferentes ImageIds pero la misma clase '. – Pabuc

+3

u puede tener múltiples clases 'class =" imagen imageN "' si eso ayuda. – Val

Respuesta

105
$('div[imageId="imageN"]').each(function() { 
    // `this` is the div 
}); 

para comprobar la sola existencia del atributo, sin importar el valor, se puede utilizar en lugar del selector de THS: $('div[imageId]')

+3

@ThiefMaster - Si el valor del atributo no es constante, (es decir, variará), ¿cómo encontrarlo? – Developer

+0

un par de preguntas: 1- qué pasa con otros elementos ... 2- qué pasa con otros valores ... Podría tener el atributo ** datos-comida ** en muchos elementos: div's, img's y atsd, donde cada uno tiene un valor diferente – dsdsdsdsd

+0

@ParthoGanguly utiliza una variable de esta manera: $ ('div [ImageID = "' + variableName + '"]') – Kama

11

No se llama una etiqueta; lo que estás buscando se llama atributo html.

$('div[imageId="imageN"]').each(function(i,el){ 
    $(el).html('changes'); 
    //do what ever you wish to this object :) 
}); 
128

A pesar de que no responde a la pregunta, precisamente, aterricé aquí al buscar una forma de obtener la colección de elementos (nombres de etiquetas potencialmente diferentes) que simplemente tenían un nombre de atributo dado (sin filtrar por valor de atributo). He encontrado que los siguientes funcionado bien para mí:

$("*[attr-name]") 

Esperanza que ayuda a cualquiera que esté pasando a la tierra en esta página buscando lo mismo que yo era :).

Actualización: Parece que no se requiere el asterisco, es decir, sobre la base de algunas pruebas básicas, la siguiente parece ser equivalente a la anterior (gracias a Matt por señalar esto):

$("[attr-name]") 
+0

¡Perfecto! Justo lo que estaba buscando. –

+0

¿No es esto tiene un problema de rendimiento? – Pinoy2015

+0

Posiblemente ... No verifiqué el aspecto del rendimiento (no era un factor importante para mi uso en ese momento). – sammy34

3

Usted puede usar el valor parcial de un atributo para detectar un elemento DOM usando el signo (^). Por ejemplo, usted tiene divs como esto:

<div id="abc_1"></div> 
<div id="abc_2"></div> 
<div id="xyz_3"></div> 
<div id="xyz_4"></div>... 

Usted puede utilizar el código:

var abc = $('div[id^=abc]') 

Esto devolverá una matriz DOM de divs que tienen Identificación comenzando con abc:

<div id="abc_1"></div> 
<div id="abc_2"></div> 

Aquí está la demostración: http://jsfiddle.net/mCuWS/

3

Usar concatenación de cadenas. Prueba esto:

$('div[imageId="'+imageN +'"]').each(function() { 
    $(this); 
}); 
Cuestiones relacionadas