Suchen Sie in jquery alle Elemente mit einem bestimmten Attributwert

88

Ich muss alle Elemente finden, die einen speziellen Attributwert haben.

Hier ist die Div, die ich finden muss (ich habe viele von ihnen ..)

<div imageId='imageN'>...

Ich muss einfach die Divs durchlaufen, die haben imageId='imageN'

Pabuc
quelle
6
Ich würde empfehlen, class="imageN"für gültiges HTML zu verwenden. Entweder das oder data-imageId="imageN"für gültiges HTML5. Mit dem ersteren können Sie die Klassenauswahl verwenden.
Andy E
Andy, der Grund dafür ist, dass diese Divs dynamisch von Code-Behind hinzugefügt werden und unterschiedliche ImageIds haben, aber dieselbe Klasse.
Pabuc
3
Sie können mehrere Klassen haben, class="image imageN"wenn das hilft.
Val
Warum wählen Sie dann nicht den Klassennamen aus, wenn sie bereits dieselbe Klasse haben?
Praxis Ashelin

Antworten:

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

Um zu überprüfen, ob das Attribut allein vorhanden ist, können Sie stattdessen den Selektor verwenden: $('div[imageId]')

DiebMaster
quelle
4
@ThiefMaster - Wenn der Attributwert nicht konstant ist (dh variiert), wie kann er dann gefunden werden?
Entwickler
ein paar Fragen: 1- was ist mit anderen Elementen ... 2- was ist mit anderen Werten ... Ich könnte das Attribut data-food für viele Elemente haben: div's, img's und a td's, wobei jedes einen anderen Wert hat.
dsdsdsdsd
@ParthoGanguly Sie verwenden eine Variable auf diese Weise: $ ('div [imageId = "' + variableName + '"]')
Kama
1
Diese Lösung beantwortet den Titel dieser Seite nicht wirklich. Sie suchen nach Elementen, die divs sind. Eine richtige Lösung ist eine, die für das eigentliche Element agnostisch ist.
AndroidDev
162

Obwohl es die Frage nicht genau beantwortet, bin ich hier gelandet, als ich nach einer Möglichkeit gesucht habe, die Sammlung von Elementen (möglicherweise unterschiedliche Tag-Namen) zu erhalten, die einfach einen bestimmten Attributnamen hatten (ohne nach Attributwert zu filtern). Ich fand, dass Folgendes für mich gut funktionierte:

$("*[attr-name]")

Hoffe, das hilft jemandem, der zufällig auf dieser Seite landet und nach dem sucht, was ich war :).

Update: Es scheint, dass das Sternchen nicht erforderlich ist, dh basierend auf einigen grundlegenden Tests scheint das Folgende dem oben genannten zu entsprechen (danke an Matt für den Hinweis):

$("[attr-name]")
sammy34
quelle
Perfekt! Genau das, wonach ich gesucht habe.
Paulius Matulionis
Möglicherweise ... habe ich den Leistungsaspekt nicht überprüft (war zu diesem Zeitpunkt kein wichtiger Faktor für meine Verwendung).
sammy34
3
Gibt es einen Unterschied zwischen dem und $("[attr-name]")? (dh nein *)
Matthew
Ja, es gibt einen gewissen Unterschied zwischen ihnen. Sternnotation Fehler auf Firefox auslösen !!!! (Unescaped ...)
ozz
Dazu können Sie auch einen Attributwert hinzufügen, z. B.:$("[data-toggle='modal']")
MeltingDog
12

Es wird nicht als Tag bezeichnet. Was Sie suchen, wird als HTML-Attribut bezeichnet.

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

Sie können den Teilwert eines Attributs verwenden, um ein DOM-Element mithilfe des Zeichens (^) zu erkennen. Zum Beispiel haben Sie Divs wie diese:

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

Sie können den Code verwenden:

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

Dies gibt ein DOM-Array von Divs zurück, deren ID mit abcfolgendem beginnt :

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

Hier ist die Demo: http://jsfiddle.net/mCuWS/

Krunal
quelle
4

Verwenden Sie die Zeichenfolgenverkettung. Versuche dies:

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