webForumDet fria alternativet

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

JavaScript

3 svar · 1 529 visningar · startad av audipop

Medlem sedan maj 20143 inlägg
Frågan#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

Medlem 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!

Medlem 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...

Medlem sedan maj 20143 inlägg
#4

Tack så mycket för hjälpen!

263 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
117 ms — deklarationer (db)
0 ms — hämta statistik (cache)
135 ms — hämta tråd, inlägg och bilagor (db)
125 ms — ändringar (db)