Expand
Enkelt håndarbeid
Vi begynner med en enkel vevside og to javascript-funkjsoner:
test0.html:
<!DOCTYPE HTML>
<html>
<head>
<meta charset="UTF-8"/>
<title>Expand</title>
<script type="text/javascript" src="expander0.js"> </script>
</head>
<body>
<h2>Testing expand</h2>
<div>
<div id="handmade-on"
style="cursor:pointer"
onclick="javascript:exp_show('handmade');exp_hide('handmade-on');">
expand
</div>
<div id="handmade" style="display:none">
<div style="cursor:pointer"
onclick="javascript:exp_hide('handmade');exp_show('handmade-on');">
collaps
</div>
Dette kommer og går
</div>
</div>
</body>
</html>
expander0.js:
function exp_show(eltid)
{
var element=document.getElementById(eltid);
element.style.display='block';
}
function exp_hide(eltid)
{
var element=document.getElementById(eltid);
element.style.display='none';
}
Automatikk
Vi ønsker å generalisere, og vi lager en testside med to potensielle ekspansjonselementer. Disse er kalt Nr1 og Nr2. Det er div'ene med class="expand" som skal være ekspanderbare.
test1.html:
<!DOCTYPE HTML>
<html>
<head>
<meta charset="UTF-8"/>
<title>Expand</title>
<title>expandtest1</title>
<style>
.exp_on,.exp_off
{font-size:24px; color:black;
cursor:pointer; width:20px;
background-color:green}
.exp_off{background-color:red}
</style>
<script type="text/javascript" src="expander.js">
</script>
</head>
<body onload="setTogle()">
<h2>Testing expand</h2>
<h4>Nr1:</h4>
<div class="expand">
<h2>Heisann</h2>
<p>Dette kommer og går</p>
</div>
<h4>Nr2:</h4>
<div class="expand">
<h2>Hallo</h2>
<p>
<img src="bs1.gif" alt="bs1" />
</p>
</div>
<hr/>
<p onclick="alert(body.innerHTML);">
Klikk her for å se modifisert DOM
</p>
</body>
</html>
Vi lage en funksjon som kalle når siden er lastet. Denne funksjonen, setTogle(), går gjennom siden, lokaliserer alle div'er med class="expand", og preparerer, prepareElement(), disse elementene slik at de er klare for ekspansjon og kollaps.
expander.js:
function exp_show(eltid)
{
var element=document.getElementById(eltid);
element.style.display='block';
}
function exp_hide(eltid)
{
var element=document.getElementById(eltid);
element.style.display='none';
}
function prepareElement(hostelement)
{
hostelement.setAttribute('class','expanded');
var r_no = Math.ceil(Math.random()*100);
plussid='pluss'+r_no;
contentid='content'+r_no;
// make expander
plusselt=document.createElement('div');
plusselt.id=plussid;
plusstext=document.createTextNode('+');
plusselt.setAttribute('class','exp_on');
tmp="javascript:exp_hide('"+plussid+"');exp_show('"+contentid+"');"
plusselt.setAttribute("onclick",tmp);
plusselt.appendChild(plusstext);
// make collapser
minuselt=document.createElement('div');
minustext=document.createTextNode('-');
minuselt.setAttribute('class','exp_off');
tmp="javascript:exp_show('"+plussid+"');exp_hide('"+contentid+"');"
minuselt.setAttribute("onclick",tmp);
minuselt.appendChild(minustext);
// make new content
wrapper=document.createElement('div');
wrapper.appendChild(plusselt);
// make the inner content with minus and the original
contentelt=document.createElement('div');
contentelt.id=contentid;
contentelt.appendChild(minuselt);
childs=hostelement.childNodes;
for(ix=0;ix < childs.length; ix++)
contentelt.appendChild(childs[ix].cloneNode(true));
wrapper.appendChild(contentelt);
hostelement.innerHTML=wrapper.innerHTML;
exp_show(plussid);
exp_hide(contentid);
}
function setTogle()
{
var tlist=document.getElementsByTagName('div');
for(ix=tlist.length-1; ix > -1; ix--)
{
var elt=tlist[ix];
if(elt.getAttribute('class') || elt.getAttribute('className'))
{
var v=elt.getAttribute('class');
if(!v)
v=elt.getAttribute('className');
if(v == 'expand')
prepareElement(elt);
}
}
}
WXT
I dette materialet er det brukt en løsning for å vise og skjule deler av en side. Motivasjonen for dette er lik motivasjonen for å bruke popup:
Denne mekanismen er ganske enkel. Den involverte javascriptkoden, sammen med noen andre nyttige funkjsoner som brukes på disse sidene, ser slik ut: