Veröffentlicht 1. Juni 200421 j 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
2. Juni 200421 j 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]; }
2. Juni 200421 j jupp! das isses. subbergeil. endlich können die mac-safari kollegen meine anwendung auch zu 100% nutzen sääängs
2. Juni 200421 j sääängs noo bbroblämm PS: Auf der Mozilla Homepage gibts nen schönen Javascript "DOM Inspector". Der erleichtert die Fehlersuche in Javascripts ungemein!
2. Juni 200421 j Hi forTeesSake, ich hab grad gesehen das ich das tool was ich meine nicht "DOM Inspektor" heisst, sondern "Javascript console"! Sorry!
3. Juni 200421 j 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
3. Juni 200421 j dein code? notfalls: if ( obj.sourceIndex == null) { return null; } var TmpULIndex = obj.sourceIndex;
3. Juni 200421 j 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?
3. Juni 200421 j 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
3. Juni 200421 j 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; }
3. Juni 200421 j 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..
3. Juni 200421 j 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; }
3. Juni 200421 j 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
3. Juni 200421 j 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!
3. Juni 200421 j 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.
3. Juni 200421 j 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
7. Juni 200421 j 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....
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.