Globale Variable gegen while-Schleife
thomas s
- javascript
Hallo zusammen,
eine Frage. Ich muss eine Menge divs automatisch erzeugen und benötige dafür eindeutige IDs. Mein Ansatz war:
this.divId = new Date().getTime();
Wenn die Objekte aber zu schnell generiert werden, sind die IDs mehrfach vorhanden.
Ist nun eine globale Variable besser oder dies:
do {
this.divId = new Date().getTime();
}while(document.getElementById(this.divId)!=null);
Ich bevorzuge letztes, da ich dann auf die globale Variable nicht aufpassen muss. Andererseits ist es aber auch langsamer, wenn auch wenig.
Hallo thomas s,
schon mal über Zufallszahlen nachgedacht?
this.divId="X"+Math.random();
Ich kenne jetzt den JS-Zufallszahlgenerator nicht so gut, aber ich denke, einige Millionen verschiedene Zahlen sollte er schon erzeugen können, bis er sich wiederholt. Zur Not einfach die Zeit mit der Zufallszahl verrechnen.
Gruß, Jürgen
this.divId="X"+Math.random();
Das garantiert aber nicht 100%ge Eindeutigkeit, die ich aber brauche.
this.divId="X"+Math.random();
Das garantiert aber nicht 100%ge Eindeutigkeit, die ich aber brauche.
Und wie siehts aus mit demVorschlag von Jürgen, beides zu Verknüpfen?
this.divId = " X " + (new Date()).getTime() + Math.random();
Struppi.
Hallo thomas s,
wenn das echt 100%ig eindeutig sein muss und auch die Verknüpfung von Zeit (in ms) und Zufallszahl nicht reichen, musst du entweder Prüfen, ob es die ID schon gibt, oder einfach durchnummerieren:
ID_Nummer++; this.divId="X"+ID_Nummer;
ID_Numer muss dann aber eine globale Variable sein. Wenn du ihr aber einen "ordentlichen" Namen gibst, brauchst du keine Sorge wegen einer Doppeltbelegung zu haben.
Gruß, Jürgen
ID_Nummer++; this.divId="X"+ID_Nummer;
ID_Numer muss dann aber eine globale Variable sein. Wenn du ihr aber einen "ordentlichen" Namen gibst, brauchst du keine Sorge wegen einer Doppeltbelegung zu haben.
Stimmt, und das in Verbindung mit einem Objekt, dann kann man noch alle DOM Methoden Kapseln.
function Div()
{
var _id_ = 'id' + ++Div.ID;
this.id = function() { return _id_; };
this.obj = null
}
Div.ID = 0;
Div.prototype.create = function()
{
this.obj = document.createElement ? window.document.createElement('div') : {};
this.obj.id = this.id();
}
Wobei ich mich aber Frage, warum man bei dynamischen Objekten überhaupt die ID benötigt, da man ja getElementById() gar nicht braucht.
Struppi.