Neuer Layer - neuer Name

Hallo, herzallerliebste Experten, Profis und sonstige Auskenner,

ich hab ein Problem mit Netscape (teste mit 4.51):
ich erzeuge einen neuen Layer, pack ein Bild rein und will ihm dann einen anderen Namen, bzw. 'ne andere ID zuordnen (vorsichtshalber beides probiert, von wegen Generationen-Ärger):

neumann = new Layer(20);
neumann.height = 20;
neumann.left = 0;
neumann.top = y;
neumann.document.open();
neumann.document.write("");
neumann.document.close();
neumann.visibility=„show“;
neumann.id = „vert“ + anzahl;
neumann.name = „vert“ + anzahl;

(anzahl ist 'ne hochzählende Variable)

und was ist? Das blöde Ding hustet mir was und der Layer heisst immernoch _js_layer_77 (oder irgend’ne andere Nummer). Wie krieg ich einem neugeschaffenen Layer einen anderen Namen/andere ID zugewiesen?

Gruß
Sibylle

neumann ist letztendlich schon der name oder die id unter der Du den neu kreierten Layer referenzierst und das name- oder id-Attribute ist „ReadOnly“ (sprich: kann also nachtraeglich nicht neu zugewiesen werden)

Und es ist besser, den Kontext mit anzugeben, wo der Layer sich befindet. Also:

neumann = new Layer(20,window);

Alle anderere bereits im HTML-Dokument eventuell vorhandenen layer oder ilayer Tags sind bereits im layers-Objekt vorhanden.

Um trotzdem gezielt auf mehrere ueber new generierte Layer zuzugreifen, kannst Du sie auch in ein Array packen:

var lyrArray = new Array();

var tmpLyr = new Layer(20,window);

lyrArray[lyrArray.length] = ["vert"+anzahl,tmpLyr];

Und holst ihn Dir bei Bedarf ueber einen primitiven Suchalgorithmus wieder hervor:

function getMyLayer(prmName)
{
 var theLyr = null;

 for (var i=0; i

Hai, Vir2allender,

neumann ist letztendlich schon der name oder die id unter der
Du den neu kreierten Layer referenzierst und das name- oder
id-Attribute ist „ReadOnly“ (sprich: kann also nachtraeglich
nicht neu zugewiesen werden)

In meinem HTML 4.0 Handbuch von Franzis’ steht’s als veränderbar - bisher lag der Schmöker eigentlich immer richtig (auch wenn ich gelegentlich nur Bahnhof verstehe) :frowning:
Übrigens hat der neue Layer eben nicht"neumann" als ID oder Namen - sonst könnte ich ja an der Stelle meinen selbstkonstruierten reinbasteln :frowning:(
…und als wenn’s noch nicht reichen würde, daß ich Browserweichen bauen muß, haben diese Hirschen von Netscape auch noch das Layer-Objekt aus der Version 6 rausgeschmissen und die engen Verwandten vom IE schaffen das all-Objekt ab…*koch’ - tob’ - Dinge-an-die-Wand-schmeiß’* Das heißt, man darf sich jetzt auch noch Versions-Weichen ausdenken, oder gleich für jeden möglichen Browser und jede mögliche Version eigene Seiten bauen *RAAAHHH*

…aber ich werd’ mal ausprobieren, ob ich das über 'n Array gelöst kriege…
Dank Dir für den Tip
Sibylle

Meinte ich auch, dass mit Deiner „neumann“ Instanz das name- oder id-Attribute praktisch festgelegt ist. Natuerlich ist „neumann“ das Objekt und „name“ sowie „id“ die Attribute. In der Orginal Doku sind die Attribute aber als „readOnly“ gekennzeichnet, was auch verstaendlich ist, denn eine Aenderung wuerde eine Aenderung an der layers-Collection bewirken.

Beim dynamischen Kreieren von „Layers“ musst Du Dich wohl oder uebel an drei Varianten halten, denn sowohl „layers“ als auch „all“ sind kein Standard. Deshalb gibt es auch keine Unterstuetzung diesbzgl. in neuen Browsern (also „layers“ in NS6 usw.). MSIE5.x uebernimmt noch das „all“ vom MSIE4.x. Um eine Browser-Abfrage kommst du also nicht drumrum, was aber nicht so schwer ist:

if (window.opera) {
 // Its Opera v5.12/v6.0/v6.01
} else if (window.document.all && (navigator.appName=="Microsoft Internet Explorer")) {
 // Its MSIE v4.x/v5.0x/v5.5/v6.0
} else if (window.document.layers && (navigator.appName=="Netscape")) {
 // Its Netscape v4.xx
} else if (window.document.documentElement && !window.document.all) {
 // Its Netscape v6.0/v6.1/v6.2/v6.21 and Mozilla v0.9x
} else {
 // Its Unkown
}

Obiges macht man eigentlich ganz anders und besser, reicht aber fuer Deine Zwecke denke ich mal.
Dazu gibt es undokumentierte Moeglicheiten der Browser. Das ist aber eine andere Geschichte…

Was der Opera zur Zeit alles kann weiss ich nicht genau, bin da nicht mehr so upToDate.
Der Opera 5 kann auf alle Faelle das meiste nicht dynamisch.

Im NS4 machst Du es eben ueber:

 new Layer()
 open(),write(),close()

Im MSIE machst Du es ueber:

 window.document.body.insertAdjacentHTML("beforeEnd",...);
 window.document.all[...]
 Objekt.innerHTML = ...

Das kannst du fuer alle MSIE-Versionen nehmen, auch wenn Neuere mehr koennen.

Im Netscape6, Mozilla oder auch im MSIE5 und hoeher:

 window.document.createElement(...);
 Objekt.setAttribute(...,...);
 window.document.body.appendChild(Objekt);
 Objekt.innerHTML = ...

Auf alle „Layers“ in allen Browsern kannst Du mit:

 window.document.getElementById();

oder einer der anderen getElementBy… Methoden zugreifen. Das gilt auch fuer den Netscape v4 und MSIE v4, wenn man eine undokumentierte Eigenschaft dieser Browser nutzt. Auch das ist eine andere Geschichte…

1 „Gefällt mir“

'morjen, Vir2allender,

Du bist ‚n Schatz - was nix daran ändert, daß ich mich darüber ärger‘, fünfundzwölfzig Fantastrilliarden Weichen basteln zu müssen…
Der Rest meines Codes sieht dem, was Du schriebst, schon sehr ähnlich.

In
der Orginal Doku…

Orginal-Doku??? Auch haben will!!! Kannst Du mir 'ne Quelle für 'ne aktuelle Objekt-Referenz nennen? Wär Dir auf ewig dankbar.
Gruß und nice weekend
Sibylle

Moin moin…

ich habe nur mal bei Netscape nachgeschaut, was die dazu sagen. Mehr nicht.

http://developer.netscape.com/docs/manuals/index.htm…

gib niemals einem layer nen namen mit nem unterstrich… das mag der 4.x naemlcih nciht

keine ahnung, ob es den bug in den aktuellen versionen noch gibt…

Hai, dog.je

gib niemals einem layer nen namen mit nem unterstrich… das
mag der 4.x naemlcih nciht

…macht er doch alleene…

Gruß
Sibylle