Elementzugriff unter Netscape 4.7
Karola
- javascript
Ich habe ein Script, in dem über document.getElementById(nameelement) auf ein div mit id zugegriffen wird. Nun musste ich leider feststellen, dass das im Netscape 4.7 nich funktioniert, weil der die Methode noch gar net kennt.
Wie kann ich denn unter Netscape 4.7 auf ein Element zugreifen?
Ich möchte halt ein unsichtbares Element sichtbar machen.
Vielen Dank schonmal!!
Karola
Hallo.
Wie kann ich denn unter Netscape 4.7 auf ein Element zugreifen?
Das geht über document.layers["id_des_Elements"] (http://selfhtml.teamone.de/javascript/objekte/layers.htm).
Ich möchte halt ein unsichtbares Element sichtbar machen.
Und das geht dann dementsprechend mit document.layers["id_des_Elements"].visibility = "show" (http://selfhtml.teamone.de/javascript/objekte/layers.htm#visibility).
Gruß
Norbert
Ich habe ein Script, in dem über document.getElementById(nameelement) auf ein div mit id zugegriffen wird. Nun musste ich leider feststellen, dass das im Netscape 4.7 nich funktioniert, weil der die Methode noch gar net kennt.
Hallo Karola,
vielleicht kannst Du in Deinem Script folgende Funktion mit einbinden:
function pfad(n){
if(document.all){
obj = document.all[n].style;
}
else if(document.layers){
obj = document.layers[n];
}
else if(document.getElementById){
obj = document.getElementById(n).style;
}
}
Darin wird je nach Browser (IE oder NC 4/oder höher) der Weg zum Objekt gebahnt, wobei n für den Elementnamen steht.
Grüße,
Karin
Moin,
Im Netscape 4.7 kannst du auf divs mit document.layers http://selfhtml.teamone.de/javascript/objekte/layers.htm zugreifen.
Dieser Zugriff ist allerdings Netscape-Spezifisch und auch die visibility-Eigenschaft heißt hier "show" respektive "hide"
also mußt du ihn getrennt behandeln ala:
if (document.layers) { //Der Nescape-Teil
document.layerName.visibility="show";
...
}
else
if (document.getElementById) { //DOM-Fähiger Browser
...
}
...
so long.
Hallo,
Dieser Zugriff ist allerdings Netscape-Spezifisch und auch die visibility-Eigenschaft heißt hier "show" respektive "hide"
nur die halbe Wahrheit.
Es empfiehlt sich hidden und visible zu verwenden, es sei den man möchte die gesetzte Eigenschaft selbst abfragen.
Grüsse
Cyx23
nur die halbe Wahrheit.
Es empfiehlt sich hidden und visible zu verwenden, es sei den man möchte die gesetzte Eigenschaft selbst abfragen.
Grüsse
Cyx23
Die wo/wann/wie definiert sind? Ich finde nur
http://selfhtml.teamone.de/javascript/objekte/layers.htm#visibility, lasse mich aber gern eines besseren belehren.
Hallo Vimes!
nur die halbe Wahrheit.
Es empfiehlt sich hidden und visible zu verwenden, es sei den man möchte die gesetzte Eigenschaft selbst abfragen.
Grüsse
Cyx23
Die wo/wann/wie definiert sind? Ich finde nur
http://selfhtml.teamone.de/javascript/objekte/layers.htm#visibility, lasse mich aber gern eines besseren belehren.
da Netscape 4 normale Styleangaben versteht (auch mittels JavaScript) kommt er auch mit visible und hidden wunderbar zurecht.
Wegen der vielen Vorteile von einheitlichem und kompakten einfachen Code empfehle ich wo möglich homogen zu arbeiten, allerdings mit dem Problem sich notfalls an die möglichen Unterschiede zu erinnern, also etwa bei if(document.layers[0].visibility="...
Selber testen, und im Archiv gibts auch einiges dazu.
Grüsse
Cyx23
Vielen Dank allen!
War mir klar, dass mir ne browserabfrage nicht erspart bleibt. *seufz*
Wat soll's, auf geht's!
lg
Karola
Hi Karola,
War mir klar, dass mir ne browserabfrage nicht erspart bleibt.
Das kommt ganz darauf an. Du kannst auch die Ebene per CSS für alte Browser standardmäßig eingeblendet lassen. Dann bindest Du zusätzlich ein CSS ein, was nur neuere Browser-Typen verstehen (Stichwort: CSS-Weiche), wobei die Ebenen dort ausgeblendet sind und später dynamisch eingeblendet werden. Ich mache das so und verwende nur noch Scripte für DOM-fähige Browser. NN4-User haben dann eben Pech. I don't care!
MfG
Danny
Die Layer eingeblendet lassen, kann ich hier leider nicht, da sie sich und die darin enthaltene Informationen überlappen würden.
Und "I don't care!" kann ich leider auch nicht sagen, da ich nicht für mich sondern für einen Kunden programmiere.
lg
Karola
Du kannst auch die Ebene per CSS für alte Browser standardmäßig eingeblendet lassen.
I don't care!
MfG
Danny
Okay. Ich realisiere auch Projekte für Unternehmen. Dann versuche den Kunden davon zu überzeugen, dass sich der Mehraufwand für NN4 nicht lohnt und das stattdessen das Geld besser für Usability und W3C-Konformität ausgegeben werden sollte... Ich weiß wohl, das dies keine leichte Aufgabe ist.
Für NN4 und ähnliche alte Browser würde ich es so einrichten, dass die Layer nebeneinander stehen...
Was willst Du eigentlich machen, wenn ein Benutzer Javascript abgeschaltet hat? Dann gehen Deinem Kunden evtl. seine Kunden verloren, weil die den Inhalt dann nicht sehen können. Eine Webseite sollte daher auch ohne Javascript zugänglich sein und zwar in _jedem_ Browser...
Danny
Schau Dir mal http://www.ninja-borkowski.de.vu im IE und NN4.7 an, dann verstehst Du was ich meine...
Schau Dir mal http://www.ninja-borkowski.de.vu im IE und NN4.7 an, dann verstehst Du was ich meine...
Das ist doch eine einwandfreie Seite. Im MZ 1.4 eine dezente leere Seite.
Struppi.
Im MZ 1.4 eine dezente leere Seite.
Ging dann wohl nach hinten los... ;) Okay, werde mal nach schauen. Seite ist ja schon älter, hatte seinerzeit nur bis Moz 1.0 getestet.
Im MZ 1.4 eine dezente leere Seite.
Ging dann wohl nach hinten los... ;) Okay, werde mal nach schauen. Seite ist ja schon älter, hatte seinerzeit nur bis Moz 1.0 getestet.
sorry, seh grad das lag am webwasher, was immer der da auch rausgemacht hat.
Struppi.
Nix für ungut. URL läuft ja über Denic.vu, die schalten da wohl was vor.
Nix für ungut. URL läuft ja über Denic.vu, die schalten da wohl was vor.
*g*
die benutz ich doch nicht. ich mein schon http://www.ivorygate.de/__nb/
irgendwie scheint der webwasher hier über's Ziel hinauszuschießen, den ohne JS funktioniert es.
Struppi.
Interessant... Vielleicht mag der Webwasher das hier nicht:
<script language="javascript" type="text/javascript">
<!--
document.write('<' +'link href="dynamic.css" type="text/css" rel="stylesheet"' +'/>');
//-->
</script>
Interessant... Vielleicht mag der Webwasher das hier nicht:
nö, ich vermute mal eher, das es irgendwo einen onload Aufruf gibt und den kappt der.
Struppi.
Stimmt, den gibt's.
...
Okay. Ich realisiere auch Projekte für Unternehmen. Dann versuche den Kunden davon zu überzeugen, dass sich der Mehraufwand für NN4 nicht lohnt und das stattdessen das Geld besser für Usability und W3C-Konformität ausgegeben werden sollte... Ich weiß wohl, das dies keine leichte Aufgabe ist.
es ist da wo ein Unternehmen Kunden wirklich erreichen möchte Unfug Netscape 4 Benutzer schlecht zu bedienen, und Usability, Zugänglichkeit und W3C-Konformität sind sowieso angesagt.
Für NN4 und ähnliche alte Browser würde ich es so einrichten, dass die Layer nebeneinander stehen...
oft praktikabel, aber bei visibility in der hier dargelegten Weise dürfte Netscape 4 wahrscheinlich ohne nenneswerten Mehraufwand zu berücksichtigen sein.
Was willst Du eigentlich machen, wenn ein Benutzer Javascript abgeschaltet hat? Dann gehen Deinem Kunden evtl. seine Kunden verloren, weil die den Inhalt dann nicht sehen können. Eine Webseite sollte daher auch ohne Javascript zugänglich sein und zwar in _jedem_ Browser...
das wäre ein Grund die Styleeigenschaften teilweise von JavaScript abhängig zu machen, hat aber mit Netscape 4 nichts tun, sondern betrifft am ehesten die IE.
...
Anwendung:
el = getElem(layername);
showElem(el); // bzw. hideElem(el);
var nn4, ie4, dom = false;
if (document.layers)
nn4 = true;
if (document.all)
ie4 = true;
if (document.getElementById) {
nn4 = false;
ie4 = false;
dom = true;
}
function getElem(name)
{
if (nn4) return findLayer(name, document);
if (ie4) return eval('document.all.'+name);
if (dom) return document.getElementById(name);
}
function findLayer(name, doc) // ns4: Routine, um den 'Pfad' zum Layer zu bestimmen
{
for (var i=0; i<doc.layers.length; i++) // Die Layer des aktuellen 'document' Objekts durchsuchen
{
var layer = doc.layers[i];
if (layer.name == name) return layer; // Ist der aktuelle Layer der gesuchte?
if (layer.document.layers.length > 0) // Wenn nicht, enthält er weitere Layer?
{
var layer = findLayer(name, layer.document); // Dann such dort, mit einem neuen document Objekt
if (layer != null) return layer; // In tieferer Ebene gefunden
}
}
return null; // Layer nicht gefunden ;-[
}
function hideElem(elem)
{
if (nn4) elem.visibility = "hide";
else elem.style.visibility = "hidden";
}
function showElem(elem)
{
if (nn4) elem.visibility = "show";
else elem.style.visibility = "visible";
}
Vielen Dank allen!
War mir klar, dass mir ne browserabfrage nicht erspart bleibt. *seufz*
Wat soll's, auf geht's!
Es reicht eine Funktion zu programmieren, die das macht, da auch der IE 4 nicht document.getElementById(nameelement) kann.
function getElementById(id)
{
var obj;
if(document.getElementById) obj = document.getElementById(id) ;
else if(document.layers) obj = document.layers[id];
else id(document.all) obj = document.all[id];
return obj;
}
und Das gleiche für die Funktion um einen layer sichtbar/unsichtbar zu machen.
function showLayer(id, mode)
{
var obj;
if(typeof id == 'string') obj = getElementById(id);
else obj = id;
if(typeof document.layers != 'undefined')
{
vis = mode ? 'show' : 'hidden';
obj['visibility'] = vis;
return obj['visibility'];
}
vis = mode ? 'visible' : 'hidden';
obj.style['visibility'] = vis;
return obj.style['visibility']
}
Struppi.