Micha Schweizer: Die ID von firstchild

Hallo

Ich habe folgende Elemente, wobei deren Anzahl und Reihenfolge dynamisch ist:

<span id="span1">
<img src="xx/xx.jpg" id="3" alt="xx">
</span>

<span id="span2">
<img src="xx/xx.jpg" id="1" alt="xx">
</span>

<span id="span3">
<img src="xx/xx.jpg" id="2" alt="xx">
</span>

Wichtig ist für mich, die dynamsiche ID des SPAN zu erfahren

Unter IE 6 funktioniert das so:

var array = new Array();

do {
   array.push(document.getElementById('span'+ID).firstChild.id);
   ID++;
 } while (document.getElementById('span'+ID));

Frühere IE und andere Brwoser spielen da nicht mit
kann mir bitte jemand sagen, warum.
Habe jetzt schon vielrumgespielt, komme aber zu keiner browserübergreifenden Lösung

Danke!
micha

  1. Hallo,

    <span id="span1">
    <img src="xx/xx.jpg" id="3" alt="xx">
    </span>

    firstChild ist hier der durch den Zeilenumbruch entstandene Textknoten. IDs duerfen zudem nicht mit einer Ziffer beginnen!

    Frühere IE und andere Brwoser spielen da nicht mit
    kann mir bitte jemand sagen, warum.
    Habe jetzt schon vielrumgespielt, komme aber zu keiner browserübergreifenden Lösung

    Ab IE 5.0 ist das W3C-DOM relativ umfangreich umgesetzt. Probiere es alternativ mit getAttribute("id") bzw. frage mittels getElementsByTagName("span") die span-Elementobjekte unterhalb des Elternelements ab.

    Ansonsten waere auch eine Pruefung von knoten.nodeType hilfreich (Element --> 1, Textknoten --> 3).

    Fuer IE 4 kaeme noch das all-Objekt in Betracht.

    MfG, Thomas

  2. Hallo Micha Schweizer,

    firstChild ist immer riskant, da in einigen Browsern Zeilenumbrüche zwischen den Tags als Knoten gelten. Du müsstest also Prüfen, ob das erste Kind auch ein Bild ist.

    Warum nimmst du nicht statt

    document.getElementById('span'+ID).firstChild.id

    lieber

    document.getElementById('span'+ID).document.getElementsByTagName("img")[0].id ?

    Gruß, Jürgen

  3. Hey ihr beiden,

    besten Dank für die Antworten.
    Der Zeilenumbruch ist bereits die Lösung, der im IE 6.0 aber ignoriert wird - wusste ich nicht ...

    Das erklärt auch, warum ich bei der Abfrage von nodeType untershciedliche Ergebnisse bekam

    micha

  4. var array = new Array();

    do {
       array.push(document.getElementById('span'+ID).firstChild.id);
       ID++;
    } while (document.getElementById('span'+ID));

    Warum merkst du dir die IDs un dn ciht gleich die Objekte?

    array.push(document.getElementById('span'+ID).firstChild);

    Damit hast du später schnelleren Zugriff auf die Objekte

    Struppi.