Trova tutti gli elementi con un determinato valore di attributo in jquery


88

Devo trovare tutti gli elementi che hanno un valore di attributo speciale.

Ecco il div che devo trovare (ne ho molti ..)

<div imageId='imageN'>...

Ho semplicemente bisogno di scorrere i div che hanno imageId='imageN'


6
Suggerirei di utilizzare class="imageN"per il bene di HTML valido. O quello o data-imageId="imageN"per il bene di HTML5 valido. Con il primo, potresti usare il selettore di classe.
Andy E

Andy, il motivo è che questi div vengono aggiunti dinamicamente dal code-behind e hanno ImageId diversi ma della stessa classe.
Pabuc

3
Puoi avere più classi class="image imageN"se questo aiuta.
Val

Perché non selezionare sul nome della classe se hanno già la stessa classe?
Praxis Ashelin

Risposte:


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

Per verificare la sola esistenza dell'attributo, indipendentemente dal valore, puoi utilizzare invece questo selettore: $('div[imageId]')


4
@ThiefMaster - Se il valore dell'attributo non è costante, (cioè varierà), come trovarlo?
Sviluppatore

un paio di domande: 1- che dire degli altri elementi ... 2- che dire degli altri valori ... potrei avere l'attributo data-food su molti elementi: div's, img's e a td's, dove ognuno ha un valore diverso.
dsdsdsdsd

@ParthoGanguly Usi una variabile in questo modo: $ ('div [imageId = "' + variableName + '"]')
Kama

1
Questa soluzione non risponde realmente al titolo di questa pagina. Stai cercando elementi div. Una soluzione adeguata è quella che è agnostica dell'elemento reale.
AndroidDev

164

Sebbene non risponda esattamente alla domanda, sono arrivato qui durante la ricerca di un modo per ottenere la raccolta di elementi (nomi di tag potenzialmente diversi) che avevano semplicemente un dato nome di attributo (senza filtrare per valore di attributo). Ho scoperto che quanto segue ha funzionato bene per me:

$("*[attr-name]")

Spero che questo aiuti qualcuno che capita ad atterrare su questa pagina cercando la stessa cosa che ero io :).

Aggiornamento: sembra che l'asterisco non sia richiesto, ovvero in base ad alcuni test di base, quanto segue sembra essere equivalente al precedente (grazie a Matt per averlo segnalato):

$("[attr-name]")

Perfetto! Proprio quello che stavo cercando.
Paulius Matulionis

Molto probabilmente ... non ho controllato l'aspetto delle prestazioni (non era un fattore importante per il mio utilizzo all'epoca).
sammy34

3
C'è qualche differenza tra quello e $("[attr-name]")? (cioè no *)
Matteo

Sì, c'è una certa differenza tra loro. notazione stella genera errore su Firefox !!!! (Unescaped ...)
ozz

in aggiunta a questo, puoi anche includere un valore di attributi, ad esempio:$("[data-toggle='modal']")
MeltingDog

12

Non si chiama tag; quello che stai cercando è chiamato attributo html.

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

5

È possibile utilizzare il valore parziale di un attributo per rilevare un elemento DOM utilizzando il segno (^). Ad esempio, hai div come questo:

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

Puoi usare il codice:

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

Questo restituirà un array DOM di div che hanno id che inizia con abc:

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

Ecco la demo: http://jsfiddle.net/mCuWS/


4

Usa la concatenazione di stringhe. Prova questo:

$('div[imageId="'+imageN +'"]').each(function() {
    $(this);   
});
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.