2012-06-08 12 views
6

Ich habe Probleme, jqueries .Each zu verstehen. Ich habe den folgenden Code:jquery .each funktioniert nur auf das erste Element

$('#testDiv').each(function(index, domEle){  
    $(this).text(index); 
}); 

und den folgenden HTML

<div id="p18"> 
    <div class="inner"> 
     <span>...</span> 
     <p class="right">...</p> 
     <div id="testDiv"></div> 
    </div> 
</div> 
<div id="p19"> 
    <div class="inner"> 
     <span>...</span> 
     <p class="right">...</p> 
     <div id="testDiv"></div> 
    </div> 
</div> 
<div id="p20"> 
    <div class="inner"> 
     <span>...</span> 
     <p class="right">...</p> 
     <div id="testDiv"></div> 
    </div> 
</div> 

Wenn das Skript läuft es funktioniert nur für die erste testDiv, wie es richtig, den Text auf 0 setzt, aber die anderen testDivs .

Mein übergeordnetes Ziel ist es, ein Skript zu schreiben, das die Höhe des Div basierend auf der Höhe eines anderen DIV setzt. Die Höhen unterscheiden sich, also denke ich, dass eine Schleifenstruktur der Weg ist (außer ich täusche mich?)

Was mache ich falsch mit dem jq-Code?

+1

Eine ID sollte auf der gesamten Seite eindeutig sein, das von Ihnen beobachtete Verhalten ist völlig normal. –

+1

Ihr HTML ist nicht gültig :) doppelte ID

+0

beheben Sie das Problem mit mehreren Elementen mit der gleichen ID, und versuchen Sie dann mit '$ .Each' auf eine Klasse, z. '$ ('. inner'). jede (Funktion ...' – jimmym715

Antwort

16

Sie können nicht die gleiche #id für verschiedene Elemente verwenden. Versuchen Sie, den Rest umbenennen und Sie werden das Ergebnis erhalten Sie

wollen

Oder tun dies (Arbeiten ohne Klassen Zugabe - saubereren Code)

$('.inner div').each(function(index, domEle){  
    $(this).text(index); 
}); 
+0

Ich habe keine IDs für eines meiner ausgewählten Elemente gesetzt. In meinem Fall hat das Hinzufügen von domEle zu meiner Funktion den Trick gemacht. Danke – DerpyNerd

3

Das ist kein Problem mit der each Methode. Sie haben dieselbe id für mehrere Elemente angegeben, was nicht unterstützt wird.

Verwenden Sie stattdessen eine Klasse, und Sie können alle Elemente finden.

Demo: http://jsfiddle.net/Guffa/xaL4n/

6

id Wähler maximal ein Element zurückgibt.

Sie sollten nie mehr als ein Element mit derselben ID haben. es ist eine ungültige HTML

Dies funktioniert, aber Sie sollten die HTML reparieren statt:

$('div[id="testDiv"]')... 

Was sollten Sie wirklich tun, ist:

<div id="p18"> 
    <div class="inner"> 
     <span>...</span> 
     <p class="right">...</p> 
     <div class="testDiv"></div> 
    </div> 
</div> 
<div id="p19"> 
    <div class="inner"> 
     <span>...</span> 
     <p class="right">...</p> 
     <div class="testDiv"></div> 
    </div> 
</div> 

von der Klasse wählen Sie dann:

$('.testDiv')... 
+0

* facepalm * kann mir nicht glauben vergaß das xD Danke :) – Skye

+1

@Skye. Bitte verwenden Sie nicht meine Problemumgehung. Es ist immer noch ein ungültiger HTML-Code. – gdoron

+0

Keine Sorge. Die TestDivs werden mit jq hinzugefügt, so dass sie schnell behoben werden können – Skye

1

Sie haben ungültiges HTML. Ids müssen einzigartig sein.

<div id="p20"> 
    <div class="inner"> 
     <span>...</span> 
     <p class="right">...</p> 
     <div class="testDiv"></div> 
    </div> 
</div> 

Javascript:

$('.testDiv').each(function(index, domEle){  
    $(this).text(index); 
}); 
1

Sie können nicht gleiche div id in einer HTML-Seite angeben, Sie sollten id="testDiv" zu class="testDiv"

HTML ändern.

<div id="testDiv"></div> 

insteed, dass, versuchen

<div class="testDiv"></div> 

und Ihre Funktion sollte

$('.testDiv').each(function(index, domEle){  
$(this).text(index); 

}) aussehen;

Verwandte Themen