webForumDet fria alternativet

Hjälp med expanderbar meny (style.display, document.querySelectorAll)

3 svar · 1 527 visningar · startad av audipop

audipopMedlem sedan maj 20143 inlägg
#1

Jag har försökt skapa en meny där undermenyn ska kunna fällas ut & in med hjälp av style.display-egenskapen. Jag har kört fast ordentligt och undrar vad jag saknar? Vore oerhört tacksam för hjälp!

Länk till kod:
http://stackoverflow.com/questions/23543087/expandable-ul-list-javascript-function-with-document-queryselectorall

audipopMedlem sedan maj 20143 inlägg
#2

HTML:
<section class="meny">

<h4 class="meny1">Nyheter</h4>
<ul>
<li class="meny2"><a href="n1.html">Lokalt</a></li>
<li class="meny2"><a href="n2.html">Sverige</a></li>
<li class="meny2"><a href="n3.html">Världen</a></li>
</ul>

CSS:

.meny2
{
margin-left: 0%;
padding: 1% 0%;
display: none;
}

JS:
function toggling()
{

var nextElement = next(this);

if(nextElement.style.display == "block")
{
nextElement.style.display = "none";
}

else
{
nextElement.style.display = "block";
}
}

function next(elem) {
do
{
elem = elem.nextSibling;
}

while (elem && elem.nodeType != 1);

return elem;
}

var toggle = document.getElementsByTagName("h4");

for(var i = 0; i < toggle.length ;i++)
{
if(toggle*.className = "meny1")*
{
toggle*.onclick = toggling;
}*
}

Har klurat ut detta hittills men får det inte att fungera riktigt med att listan ska vara ihopfällbar när man går in på sidan.
queryselectorAll får jag inte till heller, vore oerhört tacksam för hjälp!

voigtann1Medlem sedan juni 20019 519 inlägg
#3

Du få nog ändra din HTML kod lite:

    <h4 class="meny1">Nyheter</h4>
    <ul class="meny2">
        <li><a href="n1.html">Lokalt</a></li>
        <li><a href="n2.html">Sverige</a></li>
        <li><a href="n3.html">Världen</a></li>
    </ul>

och JS koden kan se ut:

function toggling() {
  var nextElement = next(this);
  console.log(nextElement.style.display);
  if(nextElement.style.display == "block") {
    nextElement.style.display = "none"; 
  } else {
    nextElement.style.display = "block"; 
  }
}

function next(elem) {
  do
  {
    elem = elem.nextSibling;
  }  while (elem && elem.nodeType != 1);

  return elem; 

}

window.onload = function() {
  var toggle = document.getElementsByTagName("h4");

  for(var i = 0; i < toggle.length ;i++)
  {

    if(toggle[i].className == "meny1")

    {
      toggle[i].onclick = toggling;
    }

  } 
};

exempel: http://jsbin.com/qexego/1/edit

Tycker jag känner igen koden...

audipopMedlem sedan maj 20143 inlägg
#4

Tack så mycket för hjälpen!

135 ms totalt · 3 externa anrop · v20260731065814-full.beb2e261
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)