webForumDet fria alternativet

Gömma alla DIV:ar utom en

JavaScript

5 svar · 264 visningar · startad av Skarre

Medlem sedan apr. 20012 427 inlägg
Frågan#1

Jag håller på men en DHTML-meny och funderar på hur jag ska bära mig åt för att dölja alla alternativlager utom ett.

Menyn

Här är funktionen som visar alternativlagren följt av en länk som använder denna:

function showAlt(strDiv, objRef) {
	var altDiv = document.all[strDiv]
	altDiv.style.visibility = "visible";
	altDiv.style.top = getOffsetTop(document.all["menuTop"]) + 26;
	altDiv.style.left = getOffsetLeft(objRef) - 5;
}

<a href="javascript:;" onClick="showAlt('altdiv1',this)">

När man klickar på ett en länk i den översta diven så visas en div innehållande tre alternativ, och när man klickar på nästa så ska naturligtvis alla divar utom den rätta gömmas. Hur åstadkommer jag detta?

Medlem sedan dec. 199962 inlägg
#2

<script>
var remember = new Array();
var remember2 = new Array();
var checkIt;
var DHTML = (document.getElementById || document.all || document.layers);

function show(name,lvl,obj)
{

if (!DHTML) return;
//checkUserInput();
if (remember\[lvl\] && remember\[lvl\] == name) return;
if (remember\[lvl\])
{
closeAll(lvl);
}
if (name)
{
var x = getObj(name);
x.visibility = 'visible';
}
remember\[lvl\] = name;
if (obj.parentNode) y = obj.parentNode;
else if (obj.parentElement) y = obj.parentElement;
else return;
if (y.className) return;
y.className = 'over';
if (remember2\[lvl\]) remember2\[lvl\].className = '';
remember2\[lvl\] = y;

}

function closeAll(lvl)
{
for (i=remember.length - 1;i>=lvl;i--)
{
if (remember*)
{
var x = getObj(remember*);
x.visibility = 'hidden';
}
remember = null;
if (remember2
)
{
remember2*.className = '';
remember2 *= null;
}
}
}
function checkUserInput()
{
if (checkIt) clearTimeout(checkIt);
checkIt = setTimeout('closeAll(1)',2000);
}

function getObj(name)
{
if (document.getElementById)
{
return document.getElementById(name).style;
}
else if (document.all)
{
return document.all[name].style;
}
else if (document.layers)
{
return document.layers[name];
}
else return false;

}
</script>
<a href="#" onclick="show('altdiv1',1,'');">a1</a>
<a href="#" onclick="show('altdiv2',1,'');">a2</a>
<a href="#" onclick="show('altdiv3',1,'');">a3</a>
<a href="#" onclick="show('altdiv4',1,'');">a4</a>

<div id="altdiv1" style="visibility:hidden">altdiv1</div>
<div id="altdiv2" style="visibility:hidden">altdiv2</div>
<div id="altdiv3" style="visibility:hidden">altdiv3</div>
<div id="altdiv4" style="visibility:hidden">altdiv4</div>******

Medlem sedan apr. 20012 427 inlägg
#3

Det är lite "overkill" för detta ändamål, men tack ändå, Daze! :)

Jag löste det med följande:

for (i = 1; i <= 3; i++) {
	if (i != intDiv) {
		document.all["altdiv"+i].style.visibility = "hidden";
	}
}

Nu gäller det bara att kunna räkna hur många DIV:ar som heter "altDiv" följt av en siffra så att jag kan ersätta 3:an ovan med den siffran. *suck*

Medlem sedan juni 20014 421 inlägg
#4

Gör scriptet DOM-kompatibelt.

Medlem sedan apr. 20012 427 inlägg
#5

Det behöver bara fungera i IE för tillfället, så jag väntar med det. Det är en inlämningsuppgift till plugget.

Medlem sedan juni 20014 421 inlägg
#6

Men om du kör med dom så fungerar det här skulle jag tro...:

var myRe=new RegExp(/altdiv[0-9]/)
var foo=document.getElementByTagName("DIV")
myRe.test(foo.name)
264 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
137 ms — hämta tråd, inlägg och bilagor (db)
124 ms — ändringar (db)