webForumDet fria alternativet

trädmeny, hur ändrar man länktexten?

JavaScript

11 svar · 386 visningar · startad av MaRseY

Medlem sedan maj 2001178 inlägg
Frågan#1

Hej jag håller på med en trädmeny som mer eller mindre bara visar ett lager om man klickar på länken. Men jag tänkte att det vore fint med att ha ett + framför länken om det finns underlänkar och om man sen klickar på den å underlänkarna är synliga så ska det finnas ett minus framför länken istället för att markera att man kan dölja underlänkarna genom att klicka igen.

nu använder jag en ganska enkel funktion jag själv knåpa ihop.. det är för att visa lagrerna, skulle helst vela få in +/- grejjset i samma härva..

function visa(id)
{
	if(id.style.display == 'block'){
		id.style.display='none';
	}else{
		id.style.display='block';
	}
}
Medlem sedan juni 20004 308 inlägg
#2

Detta är inte vad man brukar definiera som "lager" (läs detta inlägg), men så här kan du göra:

<style type="text/css">
.menu { padding-left:10px; }
a { text-decoration:none; color:blue; }
</style>
<script>
function visa(id,li) {
	if(document.getElementById(id).style.display == 'none'){
		document.getElementById(id).style.display='block';
		li.innerHTML="-"+li.innerHTML.substring(1);
	}else{
		document.getElementById(id).style.display='none';
		li.innerHTML="+"+li.innerHTML.substring(1);
	}
}
</script>
<a href="#" onClick="visa('foo',this);">- Foo</a><br>
<div id="foo" class="menu">
	<a href="#">Länk</a><br>
	<a href="#" onClick="visa('faa',this);">- Faa</a><br>
	<div id="faa" class="menu">
		<a href="#">Länk</a><br>
		<a href="#">Länk</a><br>
	</div>
	<a href="#">Länk</a><br>
</div>
Medlem sedan maj 2001178 inlägg
#3

tack, precis så jag menade.

Medlem sedan jan. 2002286 inlägg
#4

Om man vill att menyn skall startas i stängt läge så att säga.. Så att den inte är helt utvecklad alltså. hur gör man då..

Medlem sedan jan. 2002286 inlägg
#5

Hade gärna velat ha ett svar ;)

Medlem sedan dec. 20025 483 inlägg
#6

Lägg till detta innanför <script>:

window.onload = function(){
     visa("foo", document.getElementById("bar"));
};

Samt detta i den första <a>-taggen:

...id="bar"...

:)

Medlem sedan jan. 2002286 inlägg
#7

Men den lösningen var ju inte att rekommendera.
Den stänger ju bara första lagret..

Jag vill att hela menyn (med subbar) skall vara stängd.

Medlem sedan juni 20004 308 inlägg
#8

Ta en titt på DOM Meny 2.

Medlem sedan jan. 2002286 inlägg
#9

Men den har inte med plus och minus grejset hehe

Medlem sedan nov. 20017 144 inlägg
#10

Här har du alla plus och minus som du behöver:
http://david.lidstrom.nu/dev/scripts/js_pelleplus.php

Jojoxx: Din DOM Meny 2 hoppar runt i Netscape när man öppnar de olika menyerna. Visserligen så funkar den men det hoppar runt kan man säga... :)

Medlem sedan juni 20004 308 inlägg
#11

fundrusse:

Det är enkelt att lägga dit. Ändra funktionen sw så här;

function sw(mnu,li){
	if(!document.getElementById){ return false; }
	if(document.getElementById(mnu).style.display=='block'){
		if(collapseMode){
			collapseAll(document.getElementById(mnu));
		} else {
			document.getElementById(mnu).style.display='none';
		}
	} else {
		if(document.getElementById(mnu).parentNode.className=="menu" && compressedMode){
			collapseAll(document.getElementById(mnu).parentNode);
			document.getElementById(mnu).parentNode.style.display="block";
		}
		document.getElementById(mnu).style.display="block";
	}
	if(document.getElementById(mnu).style.display == 'none'){
		li.innerHTML="-"+li.innerHTML.substring(1);
	}else{
		li.innerHTML="+"+li.innerHTML.substring(1);
	}
	return false;
}

Ändra lägg till ,this i onClick-eventet samt lägg till "- " i meny-texten så här;

<a href="#" onClick="return sw('menu_a',this);" class="menuChoice">- Menu A</a><br>

Fixat.

Jesper T:
Det är inte en bug utan en feature :) Prova att sätta compressedMode och collapseMode till false i början av scriptet så får du se.

Medlem sedan dec. 20025 483 inlägg
#12

Om ändå vill använda "visa"-funktionen kan du göra så här:

<script type="text/javascript">
<!--
window.onload = function(){
	var elms = document.getElementById("meny").getElementsByTagName("*");

	for(var i=0; i<elms.length; i++){
		if(elms[i].href && elms[i].id)
			visa(elms[i+2].id, document.getElementById(elms[i].id));
	}
};
//-->
</script>

HTML-koden (sätt ett id på varje ny kategori [markerat nedan]):

<div id="meny">
<a href="#" [B]id="bar"[/B] onClick="visa('foo',this);">- Foo</a><br>
<div id="foo" class="menu">
	<a href="#">Länk</a><br>
	<a href="#" [B]id="baz"[/B] onClick="visa('faa',this);">- Faa</a><br>
	<div id="faa" class="menu">
		<a href="#">Länk</a><br>
		<a href="#">Länk</a><br>
	</div>
	<a href="#">Länk</a><br>
</div>
</div>

:)

255 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
119 ms — deklarationer (db)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)
119 ms — ändringar (db)