Zum Inhalt springen

JS document.all safari netscape


forTeesSake

Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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];

}

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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;

}

Link zu diesem Kommentar
Auf anderen Seiten teilen

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..

Link zu diesem Kommentar
Auf anderen Seiten teilen

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;

}

Link zu diesem Kommentar
Auf anderen Seiten teilen

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!

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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....

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...