li in array speichern

mo-ca

Mitglied
Moin,

also ich will meine <li>, die ich mit getElementsByTagName auslese, in ein Array speichern und dann einzeln ansprechen können.

Code:
myLis = new Array();
	for(i=0;i<myDiv.getElementsByTagName('li').length;i++) 
		myLis[i] = myDiv.getElementsByTagName('li')[i];
		document.write(myDiv.getelementsByTagName('Li'))

so gehts nicht ... :(

Wer kann mir dabei helfen ?
 
Hallo... du kannst entweder alle <li> im Dokument direkt ansprechen...:
Code:
<html>
<head>
<title>Test</title>
</head>
<body>
<ol>
 <li>Item#a1</li>
 <li>Item#a2</li>
 <li>Item#a3</li>
</ol>
<ul>
 <li>Item#b1</li>
 <li>Item#b2</li>
 <li>Item#b3</li>
</ul>
<script type="text/javascript">
<!--
myItems=new Array();
for(i=0;i<document.getElementsByTagName('li').length;++i)
    {
    myItems.push(document.getElementsByTagName('li')[i]);
    document.write('<br>*'+myItems[i].innerHTML);
    }
//-->
</script>
</body>
</html>


... oder aber bspw.über dasNode-Objekt alle <li> in einer speziellen Liste:
Code:
<html>
<head>
<title>Test</title>
</head>
<body>
 <ol id="myList">
  <li>Item#1</li>
  <li>Item#2</li>
  <li>Item#3</li>
</ol>

<script type="text/javascript">
<!--
myItems=new Array();
var myNode = document.getElementById("myList").firstChild;
while (myNode!=null)
{
  myItems.push(myNode);
  document.write('<br>*'+myItems[myItems.length-1].innerHTML);
  myNode = myNode.nextSibling;
}
//-->
</script>
</body>
</html>
 
Hallo,

document.write(myDiv.getelementsByTagName('Li'))
Willst du ein Objekt ausgeben?
Ich glaube kaum.
Du kannst nur einzelne Werte eines Objekte ausgeben, aber nicht das ganze.

Versuch mal das:
Code:
myLis = window.document.getElementsByTagName('li');

for (i=0; i<myLis.length; i++) {
    window.document.write(myLis[i].className + "<br />\r\n");
}
 
mmh

Ich habe einen Fehler gemacht, indem ich eine Zeile zuviel gepastet hab.

Das mitm Schreiben gehört gar nicht dazu! Es geht darum, dass ich die li, die getelementsbytag findet geordnet ins array kommen, damit ich die dann mit mylis[1] usw ansprechen kann!

danke trotzdem schonmal
 
Wozu eigentlich extra in einen neuen Array packen..... da sind sie schon von vornherein drinnen....mit:
Code:
document.getElementsByTagName('li')[1]
kannst du jederzeit das erste <li> im Dokument ansprechen.

Es heisst wohlgemerk getElementsByTagName und nicht getelementsbytagname... Javascript unterscheidet penibel zwischen Gross/Kleinschreibung;)
 
mmh theoretisch hast du sicher recht [praktisch bestimmt auch], nur leider klappts bei mir nicht ;)

Wenn ich versucht mit this.myDiv.getElementsByTagName('li')[0] zu arbeiten, bekomme ich ein: ist null/kein Objekt zurück.

Link zum Problemfall
 
Also bei mir geht das problemlos....

in function Menu() hat folgendes:
Code:
// Alle Unterpunkte
	var myDiv = document.getElementById( "nav_pop_" + objLink.id.strRight("nav0_") );
	if(myDiv.getElementsByTagName('li').length>0)
	    {
		myDiv.getElementsByTagName('li')[0].onmouseover = new Function("F","handlerMouseOver(myDiv.getElementsByTagName('li'))");
	    myDiv.getElementsByTagName('li')[0].onmouseout = new Function("F","handlerMouseOut(myDiv.getElementsByTagName('li'))");
		}

...die selbe Funktionalität wie das bisherige:
Code:
// Alle Unterpunkte

	var myDiv = document.getElementById( "nav_pop_" + objLink.id.strRight("nav0_") ); //div mit id
//	var myLis = myDiv.getElementsByTagName('li'); //li aus dem div
	myLis = new Array();
	for ( var i=0; i < myDiv.getElementsByTagName('li').length;i++ ) {
		myLis[i] = myDiv.getElementsByTagName('li')[i];
		//alert( myLis[1]);
	}
	myLis[0].onmouseover = new Function("handlerMouseOver(myDiv.getElementsByTagName('li))");
	myLis[0].onmouseout = new Function("handlerMouseOut(myDiv.getElementsByTagName('li'))");


//	this.myLis[x].onmouseover = new Function("handlerMouseOver(this)");
	//links.onmouseout = new Function("handlerMouseOut(this)");
...das Objekt wird so auch gefunden.

Zum einen besteht da allerdings die Frage, warum du alle <li> durchgehen willst, wenn du dann doch nur den ersten manipulieren willst....

Code:
myLis[0].onmouseover.......

zum Anderen funktioniert die Zuweisung des Funktionsaufrufes so nicht....
Code:
new Function("handlerMouseOut(myDiv.getElementsByTagName('li'))");

...das Objekt "myDiv" ist nur innerhalb von "Menu()" bekannt, du kannst es nicht als Objekt übergeben.
stell dir das vor, als ob jetzt in der Seite stehen würde...
Code:
<li onmouseout="handlerMouseOut(myDiv.getElementsByTagName('li'))">
.... und myDiv kannst du logischerweise auch nicht global deklarieren... denn jede Liste stellt ein eigenes "myDiv" dar.

Du könntest den Funktionen schlicht die ID der Listen übergeben.
 
Nein, ich will nicht nur das erste li benutzen.

Ich brauche eigentlich die Links, damit ich die mit mouseover belegen kann (bei mouseover -> killTimer, bei onmouseout -> startTimer)

Irgendwie stell ich mich mometan dumm an.
Naja, danke für die Hilfe
 
Versuchs mal hiermit:
Code:
function handlerMouseOver(ID)
{
clearTimeout(menuObjs[ID]);
}

function handlerMouseOut(ID)
{
menuObjs[ID]=setTimeout("reset_menu('"+ID+"',false)", 1000);
}

function handlerMouseClick(ID)
{
for(var e in menuObjs)
    {
    clearTimeout(menuObjs[ID]);
    }
reset_menu(ID,true);
}

function reset_menu(ID,evt)
{
for(var e in menuObjs)
    {
    if(evt||e==ID)
        {
        document.getElementById(e).className=(evt&&e==ID)?'active':'';
        document.getElementById( "nav_pop_" + e.strRight("nav0_")).style.display=(evt&&e==ID)?'block':'none';
        }
    }
}

function Menu( objLink )
{
var myDiv = document.getElementById( "nav_pop_" + objLink.id.strRight("nav0_") );
over=   new Function("fIn","handlerMouseOver('"+objLink.id+"')");
out=    new Function("fOut","handlerMouseOut('"+objLink.id+"')");
click=  new Function("fOn","handlerMouseClick('"+objLink.id+"');return false;");
objLink.onclick =click;objLink.onmouseover =over;objLink.onmouseout =out;
for(i=0;i<myDiv.getElementsByTagName('li').length;++i)
    {
    myDiv.getElementsByTagName('li')[i].onmouseover = over;
    myDiv.getElementsByTagName('li')[i].onmouseout = out;
    }
return true;
}
 
bist ein held

wenn ich das nicht mit nem anderen menü (ja habs neu gemacht :rolleyes: ) schon gepackt hätte, hätte ich das sicher gebrauchen können.

Tut mir leid, dass du soviel Arbeit (leider umsonst) gemacht hast. :(
 

Neue Beiträge

Zurück