2011-02-10 27 views
65

Potrzebuję znaleźć wszystkie elementy, które mają specjalną wartość atrybutu.Znajdź wszystkie elementy o określonej wartości atrybutu w jquery

Oto div Muszę znaleźć (mam wiele z nich ..)

<div imageId='imageN'>... 

I wystarczy pętli div które imageId='imageN'

+6

Zalecam użycie 'class =" imageN "' ze względu na poprawny HTML. Albo to albo 'data-imageId =" imageN "' ze względu na poprawny HTML5. W pierwszym przypadku możesz użyć selektora klasy. –

+0

Andy, powodem tego jest to, że divy są dodawane dynamicznie z kodu z tyłu i mają różne ImageIddy, ale samą klasę ". – Pabuc

+3

możesz mieć wiele klas 'class =" image imageN "' jeśli to pomaga. – Val

Odpowiedz

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

Aby sprawdzić wyłącznie istnienia atrybutu, bez względu na wartość, można użyć ths selektor Zamiast: $('div[imageId]')

+3

@ ThiefMaster - Jeśli wartość atrybutu nie jest stała, (to znaczy się zmienia), to jak ją znaleźć? – Developer

+0

kilka pytań: 1 - co z innymi elementami ... 2- co z innymi wartościami ... Mogę mieć atrybut ** dane-jedzenie ** na wielu elementach: div, img i td, gdzie każdy ma inna wartość. – dsdsdsdsd

+0

@ParthoGanguly Używasz zmiennej w ten sposób: $ ('div [imageId = "' + variableName + '"]') – Kama

11

To nie nazywa tag; to, czego szukasz, nazywa się atrybutem html.

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

Chociaż nie precyzyjnie odpowiedzieć na pytanie, wylądowałem tutaj przy wyszukiwaniu sposobu na pobranie kolekcji elementów (potencjalnie różnych nazw znaczników), która po prostu miała podaną nazwę atrybutu (bez filtrowania według wartości atrybutu). Okazało się, że następuje pracował dobrze dla mnie:

$("*[attr-name]") 

nadzieję, że pomoże kogoś, kto akurat wylądować na tej stronie, patrząc na to samo, że byłem :).

Aktualizacja: Wydaje się, że gwiazdka nie jest wymagana, czyli w oparciu o kilka podstawowych testów, następujące wydaje się być równoważne do powyższych (dzięki Matt za wskazanie na to uwagę):

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

Idealny! Właśnie tego szukałem. –

+0

Czy to nie jest problem z wydajnością? – Pinoy2015

+0

Całkiem możliwe ... Nie sprawdziłem aspektu wydajności (nie było to ważne dla mojego użycia w tym czasie). – sammy34

3

Ty może użyć częściowej wartości atrybutu do wykrycia elementu DOM za pomocą znaku (^). Na przykład masz div tak:

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

Można użyć kodu:

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

ta zwróci tablicę DOM div które id począwszy abc:

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

Oto wersja demonstracyjna: http://jsfiddle.net/mCuWS/

3

Użyj konkatenacji ciągów. Spróbuj tego:

$('div[imageId="'+imageN +'"]').each(function() { 
    $(this); 
}); 
Powiązane problemy