forTeesSake Geschrieben 1. Juni 2004 Teilen Geschrieben 1. Juni 2004 hi und hallo ich habe hier die folgende javascript funktion: function GetNextUL( obj ) { if( null == obj ) return null; var TmpULIndex = obj.sourceIndex; var TmpULObject = document.all[ TmpULIndex ]; while( TmpULObject && TmpULObject.tagName.toUpperCase() != "UL" ) { TmpULIndex++; TmpULObject = document.all[ TmpULIndex ]; } return TmpULObject; } die benutze ich für eine kleine aufklapp-navigation hierfür übergebe ich obj (ein <ul> element) und die funktion sucht nach einem nächsten, untergeordnetem <ul> und gibt es zurück. (anmerkung: danach kann ich das wenn vorhandene <ul> über style=block bzw. none ein/ausblenden) im IE funzt alles super. wegen dem document.all geht das ganze aber natürlich nicht im netscape bzw. safari. bei layern ist das ganz einfach, das weiss ich ja, aber in diesem fall hier?? vielen dank für jede hilfe Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
kills Geschrieben 2. Juni 2004 Teilen Geschrieben 2. Juni 2004 Funktion aus diesem Forum hier: // ############################################################################# // let's find out what DOM functions we can use var vbDOMtype = ''; if (document.getElementById) { vbDOMtype = "std"; } else if (document.all) { vbDOMtype = "ie4"; } else if (document.layers) { vbDOMtype = "ns4"; } // make an array to store cached locations of objects called by fetch_object var vBobjects = new Array(); // ############################################################################# // function to emulate document.getElementById function fetch_object(idname, forcefetch) { if (forcefetch || typeof(vBobjects[idname]) == "undefined") { switch (vbDOMtype) { case "std": { vBobjects[idname] = document.getElementById(idname); } break; case "ie4": { vBobjects[idname] = document.all[idname]; } break; case "ns4": { vBobjects[idname] = document.layers[idname]; } break; } } return vBobjects[idname]; } Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
forTeesSake Geschrieben 2. Juni 2004 Autor Teilen Geschrieben 2. Juni 2004 jupp! das isses. subbergeil. endlich können die mac-safari kollegen meine anwendung auch zu 100% nutzen sääängs Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
kills Geschrieben 2. Juni 2004 Teilen Geschrieben 2. Juni 2004 sääängs noo bbroblämm PS: Auf der Mozilla Homepage gibts nen schönen Javascript "DOM Inspector". Der erleichtert die Fehlersuche in Javascripts ungemein! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
forTeesSake Geschrieben 2. Juni 2004 Autor Teilen Geschrieben 2. Juni 2004 au ja. das schau ich mir mal an! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
kills Geschrieben 2. Juni 2004 Teilen Geschrieben 2. Juni 2004 Hi forTeesSake, ich hab grad gesehen das ich das tool was ich meine nicht "DOM Inspektor" heisst, sondern "Javascript console"! Sorry! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
forTeesSake Geschrieben 2. Juni 2004 Autor Teilen Geschrieben 2. Juni 2004 hehe, hab mich auch schon gewundert ist aber ein super tipp für alle hier denke ich Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
forTeesSake Geschrieben 3. Juni 2004 Autor Teilen Geschrieben 3. Juni 2004 tja, jetzt komm ich nochmal. ich könnt mir in den hintern treten. nun kam raus, dass der browser an dem ich gestern aufm mac getestet habe gar nicht der safari, sonder der IE war! (hab da wohl geschlafen) und jetzt besteht natürlich noch immer ein problem. das hab ich aber ausfindig gemacht. getElementById kann der safari. was er leider nicht kann ist in der zeile var TmpULIndex = obj.sourceIndex; DENN: sourceIndex = NULL gibbed noch ne andere möglichkeit? oder in safari dafür nen anderen ausdruck?? sängju Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
kills Geschrieben 3. Juni 2004 Teilen Geschrieben 3. Juni 2004 dein code? notfalls: if ( obj.sourceIndex == null) { return null; } var TmpULIndex = obj.sourceIndex; Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
forTeesSake Geschrieben 3. Juni 2004 Autor Teilen Geschrieben 3. Juni 2004 uhhm? aber dann komm ich ja nicht an das element ran wenn ich == null abfange und dann return(e) das bedeutet, dass ich dann ja gar nix bekomme und somit nicht weitermachen kann!?? oder steh ich mal wieder auf nem riiiiiesen schlauch? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
kills Geschrieben 3. Juni 2004 Teilen Geschrieben 3. Juni 2004 poste ma bitte deinen aktuellen code Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
forTeesSake Geschrieben 3. Juni 2004 Autor Teilen Geschrieben 3. Juni 2004 sorry im aktuellen code ist was doppelt gemoppelt, is aber nicht so schlimm. bin nur grad mittendrin... der js code: var vbDOMtype = ''; if (document.getElementById) { vbDOMtype = "std"; } if (document.all) { vbDOMtype = "ie4"; } else if (document.layers) { vbDOMtype = "ns4"; } //var vBobjects = new Array(); function Navigation() { var oEl = event.srcElement; if(oEl.src.substr(oEl.src.length-5, oEl.src.length)!="o.gif") oEl.src = "img/folder_o.gif"; else oEl.src = "img/folder.gif"; if( null == oEl ) return; oEl = GetNextUL( oEl ); if( null == oEl ) return; if( oEl.style.display == "none" || oEl.style.display == "" ) oEl.style.display = "block"; else oEl.style.display = "none"; } function GetNextUL( obj ) { if( null == obj ) return null; var TmpULIndex = obj.sourceIndex; var TmpULObject; switch (vbDOMtype) { case "std": { TmpULObject = document.getElementById(TmpULIndex); } break; case "ie4": { TmpULObject = document.all[ TmpULIndex ]; } break; case "ns4": { TmpULObject = document.layers[ TmpULIndex ]; } break; } while( TmpULObject && TmpULObject.tagName.toUpperCase() != "UL" ) { TmpULIndex++; switch (vbDOMtype) { case "std": { TmpULObject = document.getElementById(TmpULIndex); } break; case "ie4": { TmpULObject = document.all[ TmpULIndex ]; } break; case "ns4": { TmpULObject = document.layers[ TmpULIndex ]; } break; } } //return vBobjects[idname]; return TmpULObject; } wie gesagt, für IE funzt es super im safari nicht wegen o.g. fehler Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
kills Geschrieben 3. Juni 2004 Teilen Geschrieben 3. Juni 2004 1. warum hast du anstatt einer funktion zu verwenden die fetchobject -Funktion aufgelöst und den code doppelt reingenommen? 2. Warum hast du den caching mechanismus der fetchobject methode deaktiviert? Wenn du doch den cache nicht verwenden willst, musst du bloß den 2. Parameter von fetch_object() auf true zu setzen var vbDOMtype = ''; if (document.getElementById) { vbDOMtype = "std"; } if (document.all) { vbDOMtype = "ie4"; } else if (document.layers) { vbDOMtype = "ns4"; } var vBobjects = new Array(); function fetch_object(idname, forcefetch) { if (forcefetch || typeof(vBobjects[idname]) == "undefined") { switch (vbDOMtype) { case "std": { vBobjects[idname] = document.getElementById(idname); } break; case "ie4": { vBobjects[idname] = document.all[idname]; } break; case "ns4": { vBobjects[idname] = document.layers[idname]; } break; } } return vBobjects[idname]; } function Navigation() { var oEl = event.srcElement; if(oEl.src.substr(oEl.src.length-5, oEl.src.length)!="o.gif") oEl.src = "img/folder_o.gif"; else oEl.src = "img/folder.gif"; if( null == oEl ) return; oEl = GetNextUL( oEl ); if( null == oEl ) return; if( oEl.style.display == "none" || oEl.style.display == "" ) oEl.style.display = "block"; else oEl.style.display = "none"; } function GetNextUL( obj ) { if( null == obj || obj.sourceIndex ) return null; var TmpULIndex = obj.sourceIndex; var TmpULObject = fetch_object( TmpULIndex); while( TmpULObject && TmpULObject.tagName.toUpperCase() != "UL" ) { TmpULIndex++; TmpULObject = fetch_object( TmpULIndex); } return TmpULObject; } Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
forTeesSake Geschrieben 3. Juni 2004 Autor Teilen Geschrieben 3. Juni 2004 oh mann. ich glaub ich hab zu lange schon damit rumgemacht. ich muss jetzt mal pause machen, denn ich bin völlig plemmplemm. natürlich gehören die funtionen rein, leider funzt es gar nicht mehr. keine fehlermeldung, aber es passiert auch nix lol ich mach mal pause und wenn mir ein/auffällt was ich falsch gemacht habe schreibe ich hier wieder rein. so ein mist.. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
kills Geschrieben 3. Juni 2004 Teilen Geschrieben 3. Juni 2004 so müsste es auf jeden fall noch gehen, halt mit dem noch zuvor beschriebenen Problem: ar vbDOMtype = ''; if (document.getElementById) { vbDOMtype = "std"; } if (document.all) { vbDOMtype = "ie4"; } else if (document.layers) { vbDOMtype = "ns4"; } var vBobjects = new Array(); function fetch_object(idname, forcefetch) { if (forcefetch || typeof(vBobjects[idname]) == "undefined") { switch (vbDOMtype) { case "std": { vBobjects[idname] = document.getElementById(idname); } break; case "ie4": { vBobjects[idname] = document.all[idname]; } break; case "ns4": { vBobjects[idname] = document.layers[idname]; } break; } } return vBobjects[idname]; } function Navigation() { var oEl = event.srcElement; if(oEl.src.substr(oEl.src.length-5, oEl.src.length)!="o.gif") oEl.src = "img/folder_o.gif"; else oEl.src = "img/folder.gif"; if( null == oEl ) return; oEl = GetNextUL( oEl ); if( null == oEl ) return; if( oEl.style.display == "none" || oEl.style.display == "" ) oEl.style.display = "block"; else oEl.style.display = "none"; } function GetNextUL( obj ) { //if( null == obj || obj.sourceIndex ) return null; if( null == obj ) return null; var TmpULIndex = obj.sourceIndex; var TmpULObject = fetch_object( TmpULIndex); while( TmpULObject && TmpULObject.tagName.toUpperCase() != "UL" ) { TmpULIndex++; TmpULObject = fetch_object( TmpULIndex); } return TmpULObject; } Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
forTeesSake Geschrieben 3. Juni 2004 Autor Teilen Geschrieben 3. Juni 2004 tröööt alles mist. ja im IE gehts und den soll der mac-kollege jetzt auch einfach nehmen. safari - hah! was ist den safari bidde ) bidde mach dir keinen weiteren stress (vorerst) danke für alles Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
kills Geschrieben 3. Juni 2004 Teilen Geschrieben 3. Juni 2004 dein Problem könnte auch daraus resultieren, da der safari das attribute sourceindex nicht kennt!! http://selfhtml.teamone.de/javascript/objekte/all.htm#source_index kommst du nicht irgendwie anders an deine elemente? du könntest alle deinen Navigationselementen einen gleiche ID, mit laufender nummer dahinter geben, und so dann die elemente per fetch_object raussuchen! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
forTeesSake Geschrieben 3. Juni 2004 Autor Teilen Geschrieben 3. Juni 2004 hehe, da is noch jemand verpeilt ))) aus einem früheren post des threads: getElementById kann der safari. was er leider nicht kann ist in der zeile var TmpULIndex = obj.sourceIndex; DENN: sourceIndex = NULL gibbed noch ne andere möglichkeit? oder in safari dafür nen anderen ausdruck?? aber das war vielleicht schwammig formuliert. sollte aber bedeuten dass safari dad dingens nich kennt. die sache mit der id ist eine gute lösung. aaaarghh! jetzt muss ich mich doch noch mal dranmachen weil ja eine lösung wieder in sicht ist. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
forTeesSake Geschrieben 3. Juni 2004 Autor Teilen Geschrieben 3. Juni 2004 vielleicht hat ja jemand anderes schonmal so eine aufklappnavigation hier gesehen. navigation bsp wichtig: sie ist dynamisch wird also aus einer db oder xml generiert die veränderbar ist. realisiert ist das ganze via <ul> und <li> und javascript. gesucht ist eine lösung die auch für safari funzt. für IE gehts... danke Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
forTeesSake Geschrieben 7. Juni 2004 Autor Teilen Geschrieben 7. Juni 2004 OH MEIN GOTT. ich habs. und zwar so einfach dass mans nicht glauben kann. ich möchte jetzt nicht mehr alles haarklein aufzählen aber im eneffekt isses auch einfach nur einfach. ich habe ein <ul> das hat die id 0 in dem <ul> gibts noch ein <ul> mit der id 1 in diesem <ul id="1"> gibts ein <img> (entweder + oder -) zum auf/zuklappen und das hat NAME="1" und dann sag ich einfach var oEl = event.srcElement; //das <img> mit + oder minus das man anklickt function returnCurrentUl(oEl){ ulAufklapp = document.getElementById("ul"+oEl.name); return ulAufklapp } das gibt mir das <ul> zurück, das ein bzw. ausgeblendet wird. *auf die stirn hau und nimmer aufsteh* einfacher gehts nimmer.... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.