Gibt es sowas wie ein Array der id's?

en2k

Erfahrenes Mitglied
Hallo,

ich möchte in einer HTML-Datei allen Elementen, die eine bestimmte id (in meinem Fall einen festen String + eine willkürliche Zahl, z.B. "objekt1", "objekt24", "objekt365" etc) aufweisen, ein paar Funktionen geben, und zwar ohne Initialisierung - d.h. ich muss nicht extra angeben, welche Objekte es gibt, sondern das Skript soll diese Objekte automatisch beim Laden finden.

Soweit, sogut, nur hab ich es bisher mit einem Schleifendurchlauf gemacht, und das ist dann doch wenig performant, da es (bei 1000 Durchläufen oder mehr) schon einige Zeit in Anspruch nimmt - Rein die Überprüfung mittels if (document.getElementById("objekt"+x) = null) kann schon mehrere Sekunden dauern.

Deshalb meine Frage: Gibt es vielleicht ein Array, indem alle gültigen Objekt-IDs gespeichert und zur Laufzeit abfragbar sind?

Vielen Dank im Voraus

Ciao, Nino
 
Hi.

Nein, sowas gibt es nicht (wenn ich mich nicht irre :)).

Aber du kannst es dir ja selbst zusammenbasteln:
Javascript:
var array_der_ids = new Array();
var node = document.documentElement;
while (node) {
    if (node.id)
    // oder: if (node.id && node.id.search(/^objekt/) != -1))
        array_der_ids[node.id] = node;
    if (node.hasChildNodes()) 
        node = node.firstChild;
    else if (node.nextSibling)
        node = node.nextSibling;
    else while (node = node.parentNode)
        if (node.nextSibling) {
            node = node.nextSibling; 
            break;
        }
}
Gruß
 
deepthroat hat die Lösung ja schon gepostet....ich wollt nur mal auf eine andere Methode aufmerksam machen, um alle Elemente eines Dokumentes schnell durchzugehen.

Es gibt ja die Methode getElementsByTagName() ....
dort kann man als TagName auch ein * als Wildcard angeben...damit findet man dann alle Elemente und muss sich nicht umständlich durch die Knotenstruktur arbeiten :)

Code:
<script type="text/javascript">
<!--
window.onload=function()
{
  tags=document.getElementsByTagName('*');
  t=0;
  while(tags[t])
    {
      if(tags[t].id.match(/^objekt\d+$/))
        {
          //Treffer
        }
      t++;
    }
}
//-->
</script>
 
Hi.
Sven Mintel hat gesagt.:
Es gibt ja die Methode getElementsByTagName() ....
dort kann man als TagName auch ein * als Wildcard angeben...damit findet man dann alle Elemente und muss sich nicht umständlich durch die Knotenstruktur arbeiten :)
Na das ist ja interessant. Das findet man aber kaum in einer Dokumentation irgendwo. Ich hab es gleich mal ausprobiert und mit IE6 und Firefox funktioniert das sehr gut.

Hier http://www.webreference.com/programming/javascript/definitive/chap17/7.html steht das es allerdings nicht im IE <= 5.5 unterstützt wird.

Man lernt eben nie aus.

Gruß
 

Neue Beiträge

Zurück