---
title: "Array?"
type: "forum-thread"
url: "https://www.webforum.nu/amne/javascript/99234-array"
topic: "JavaScript"
topic_url: "https://www.webforum.nu/amne/javascript"
author: "Jesper T"
published: "2004-03-11T14:59:34.000Z"
updated: "2004-03-11T19:48:36.000Z"
replies: 12
views: 330
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/javascript/99234-array"
---

# Array?

## #1 — Jesper T, 2004-03-11T14:59Z

Kan man på någe vis slippa deklarera alla "undermenyer" i "menues" (se fetmarkering).

```
<script language="JavaScript">
var currentMenu=false;
var menues=new Array([b]'sub1','sub2','sub3'[/b]);
function sw(mnu,mode){
	if(mode){
		if(currentMenu){
			if(currentMenu==mnu){changeStyle(mnu,'display','none');currentMenu=false;}else{changeStyle(currentMenu,'display','none');changeStyle(mnu,'display','block');currentMenu=mnu;}
		} else {
			changeStyle(mnu,'display','block');currentMenu=mnu;
		}
	} else if (document.getElementById) {
		document.getElementById(mnu).style.display=(document.getElementById(mnu).style.display=='block')?'none':'block';
	}
}
function changeStyle(Id,Property,Value){
	if (document.all){
		eval('document.all[Id].style.'+Property+'="'+Value+'"');
	} else if (document.layers){
		eval('document.layers[Id].'+Property+'="'+Value+'"');
	} else if (document.getElementById){
		eval('document.getElementById(Id).style.'+Property+'="'+Value+'"');
	}
}
function initmenu(){
	for(var n=0;n<menues.length;n++){
		changeStyle(menues[n],'display','none');
	}
}
</script>
```

Permalänk: https://www.webforum.nu/p/99234

## #2 — dectgap, 2004-03-11T18:54Z

Eftersom jag inte vet hur html-koden för menyn ser ut kan det inte bli någon definitiv lösning, men titta på *getElementsByTagName()* och/eller *childNodes*, kanske i kombination med andra DOM-metoder.

Förresten: "menus", inte "menues" :)

Permalänk: https://www.webforum.nu/p/1296014

## #3 — nitro2k01, 2004-03-11T18:55Z

Så här kan det se ut...

```
 
function initmenu(){
	var els = document.getElementsByTagName("*");
	for(i in els){
		if (els[i].id.indexOf("sub")==0)
			changeStyle(els[i].id,'display','none');
	}
}
```

 
... förutsatt att alla menyers id börjar på sub.

Permalänk: https://www.webforum.nu/p/1296015

## #4 — Jesper T, 2004-03-11T18:59Z

Kommer här:

```
<head>
<script>

var currentMenu=false;

function sw(mnu,mode){
	if(mode){
		if(currentMenu){
 			if(currentMenu==mnu){
			changeStyle(mnu,'display','none');
			currentMenu=false;}else{changeStyle(currentMenu,'display','none');
			changeStyle(mnu,'display','block');currentMenu=mnu;}
		} else {
			changeStyle(mnu,'display','block');currentMenu=mnu;
		}
	} else if (document.getElementById) {
		document.getElementById(mnu).style.display=(document.getElementById(mnu).style.display=='block')?'none':'block';
	}
}
function changeStyle(Id,Property,Value){
	if (document.all){
		eval('document.all[Id].style.'+Property+'="'+Value+'"');
	} else if (document.layers){
		eval('document.layers[Id].'+Property+'="'+Value+'"');
	} else if (document.getElementById){
		eval('document.getElementById(Id).style.'+Property+'="'+Value+'"');
	}
}

function initmenu(){
	var els = document.getElementsByTagName("*");
	for(i in els){
		if (els[i].id.indexOf("bar")==0)
			changeStyle(els[i].id,'display','none');
	}
}

</script>

</head>
<body onload="initmenu()">

<a href="#" onclick="show('bar1',false)">A</a>
<a href="#" onclick="show('bar2',false)">1</a>
<a href="#" onclick="show('bar3',false)">B</a>
<a href="#" onclick="show('bar4',false)">2</a>
<a href="#" onclick="show('bar5',false)">3</a>

<div id="bar1" style="top:50px;">A</div>
<div id="bar2" style="top:100px;">1</div>
<div id="bar3" style="top:150px;">B</div>
<div id="bar4" style="top:200px;">2</div>
<div id="bar5" style="top:250px;">3</div>

</body>
```

Permalänk: https://www.webforum.nu/p/1296019

## #5 — Jesper T, 2004-03-11T19:05Z

Får inte till det: "id" är null eller inte ett objekt.
pekar på denna rad: if (els*.id.indexOf("bar")==0)*

Permalänk: https://www.webforum.nu/p/1296024

## #6 — nitro2k01, 2004-03-11T19:06Z

Kommentaren har tagits bort!

Permalänk: https://www.webforum.nu/p/1296025

## #7 — nitro2k01, 2004-03-11T19:07Z

Sorry... Pröva:

```
 
function initmenu(){
	var els = document.getElementsByTagName("*");
	for(i=0;i<els.length;i++){
		if (els[i].id.indexOf("sub")==0)
			changeStyle(els[i].id,'display','none');
	}
}
```

Permalänk: https://www.webforum.nu/p/1296027

## #8 — dectgap, 2004-03-11T19:08Z

> **Jesper T skrev:**
>
> Får inte till det: "id" är null eller inte ett objekt.
> pekar på denna rad: if (els*.id.indexOf("bar")==0)*

Det beror på att inte alla element har ett id.
Ändra till:

```
function initmenu(){
	var els = document.getElementsByTagName("*");
	for(i in els){
		if (els[i].id && els[i].id.indexOf("bar")==0)
			changeStyle(els[i].id,'display','none');
	}
}
```

Permalänk: https://www.webforum.nu/p/1296028

## #9 — Jesper T, 2004-03-11T19:08Z

> **nitro2k01 skrev:**
>
> Två likadana lösningar... Det kan ju inte vara annat än rätt :)

 ?

Permalänk: https://www.webforum.nu/p/1296029

## #10 — nitro2k01, 2004-03-11T19:09Z

> **Jesper T skrev:**
>
> > **nitro2k01 skrev:**
> >
> > Två likadana lösningar... Det kan ju inte vara annat än rätt :)
>
>  ?

Jag såg inte att det var du liksom... Sorry.

Permalänk: https://www.webforum.nu/p/1296032

## #11 — Jesper T, 2004-03-11T19:17Z

Tack båda, det fixade sig!
Dock lade jag till denna:

```
function initmenu(){
	var els = [b](document.all) ? document.all :[/b] document.getElementsByTagName("*");
	for(i in els){
		if (els[i].id && els[i].id.indexOf("bar")==0)
			changeStyle(els[i].id,'display','none');
	}
}
```

Om det gör ngn skillnad.
Funkar nu i: 
Opera 7.23
Mozilla Firefox/0.8
I.E. 6.0

Skulle vara kul om det funkar i tidigare versioner.

Permalänk: https://www.webforum.nu/p/1296037

## #12 — nitro2k01, 2004-03-11T19:21Z

> **dectgap skrev:**
>
> > **Jesper T skrev:**
> >
> > Får inte till det: "id" är null eller inte ett objekt.
> > pekar på denna rad: if (els*.id.indexOf("bar")==0)*
>
> 
> 
> Det beror på att inte alla element har ett id.
> Ändra till:
>
>
> ```
> function initmenu(){
> 	var els = document.getElementsByTagName("*");
> 	for(i in els){
> 		if (els[i].id && els[i].id.indexOf("bar")==0)
> 			changeStyle(els[i].id,'display','none');
> 	}
> }
> ```

Jo dectgap, alla element har ett id, dock har vissa element ett tomt id, som body och html i de flesta (eller kanske alla) fall.
Jag tror snarare att det var konstruktionen for(i in els) som krånglade.
Och Jesper, jag tror inte att din variant funkar riktigt i Netscape/Mozilla.

Permalänk: https://www.webforum.nu/p/1296042

## #13 — dectgap, 2004-03-11T19:48Z

> **nitro2k01 skrev:**
>
> Jo dectgap, alla element har ett id, dock har vissa element ett tomt id, som body och html i de flesta (eller kanske alla) fall.

Helt rätt - det var jag som hade fel.
Att så är fallet kan testat genom följande enkla kod:

```
<button onclick="alert(typeof this.id)">Exempel</button>
```

I vilket fall som helst blev det ändå fel när man försökte använda indexOf() på ett tomt id.

> **nitro2k01 skrev:**
>
> Jag tror snarare att det var konstruktionen for(i in els) som krånglade.
> Och Jesper, jag tror inte att din variant funkar riktigt i Netscape/Mozilla.

Det gör den.
Enkelt exempel:

```
<script type="text/javascript">
function initmenu(){
	var els = document.all || document.getElementsByTagName("*");
	for(x in els){
		if (els[x].id && els[x].id.indexOf("bar")==0)
			els[x].style.display = "none";
	}
}
window.onload=initmenu;
</script>

<div id="xxx">Kommer att visas.</div>
<div id="bar">Kommer att döljas.</div>
<div>Kommer att visas.</div>
```

*for ... in* fungerar för objekt, och en array är också en typ av objekt:
<http://devedge.netscape.com/library/manuals/2000/javascript/1.5/reference/stmt.html#1004815>
<http://devedge.netscape.com/library/manuals/2000/javascript/1.5/reference/array.html#1193137>

Permalänk: https://www.webforum.nu/p/1296048

---

Tråden på webben: https://www.webforum.nu/amne/javascript/99234-array
