Avatar billede torpmikkelsen Juniormester
13. marts 2007 - 09:25 Der er 7 kommentarer og
1 løsning

getElementById("nav") duer ikke

Jeg sidder og roder lidt med denne dropdown http://www.htmldog.com/articles/suckerfish/dropdowns/

Jeg laver siden i joomla og har nu fået den til at udskrive en menu som minder meget om listeopbygningen på den anden.
Mit problem er bare at joomla ikke skriver id="nav" men class="nav", dvs. at menuen ikke virker i IE da javaScript delen jo skriver getElementById("nav").

Mit første forsøg var bare at skrive getElementByClass("nav"), men overraskende nok virkede det ikke...

Er der nogen der kan skrive javadelen som, så den virker med class istedet for id.

På forhånd mange TAK!
Avatar billede torpmikkelsen Juniormester
13. marts 2007 - 09:27 #1
Den oprindelige javascript ser sådan ud:
<script type="text/javascript">
<!--
startList = function() {
if (document.all&&document.getElementById) {
navRoot = document.getElementById("nav");
for (i=0; i<navRoot.childNodes.length; i++) {
node = navRoot.childNodes[i];
if (node.nodeName=="LI") {
node.onmouseover=function() {
this.className+=" over";
  }
  node.onmouseout=function() {
  this.className=this.className.replace(" over", "");
  }
  }
  }
}
}
window.onload=startList;
//-->
</script>
Avatar billede michael_stim Ekspert
13. marts 2007 - 09:37 #2
class og id er to helt forskellige ting på et element. Eller har jeg misforstået?
Avatar billede torpmikkelsen Juniormester
13. marts 2007 - 09:42 #3
Jooo... det er det jo. Men det at Joomla skriver class istedet for id er ikke noget problem rent CSS mæssigt, så jeg kan sagtent få menuen til at virke i FireFox.

IE skal bare også lige have lidt JavaScript for at fatte det :D
Avatar billede roenving Novice
13. marts 2007 - 10:44 #4
For nogle år siden lavede jeg en generisk getElementsByClassName, den finder jeg lige frem !-)
Avatar billede roenving Novice
13. marts 2007 - 10:49 #5
<script language="javascript" type="text/javascript">
// Kaldes med getElementsByClassName("class","tagName","rootElement"); -- kun "class" er obligatorisk
function getElementsByClassName(c,t,e){
  switch(getElementsByClassName.arguments.length){
    case 0:
      return null;
    case 1:
      t = '*';
      e = document;
      break;
    case 2:
      e = document;
  }
  var r = [],tags = e.getElementsByTagName(t);
  for(i=0;tags.length>i;i++){
    if(tags[i].className.indexOf(c) > -1)r[r.length] = tags[i];
  }
  return (r.length>0)?r:null;
}
</script>

-- og så udskifter du:

navRoot = document.getElementById("nav");

Med:

navRoot = getElementsByClassName("nav")[0];
Avatar billede torpmikkelsen Juniormester
13. marts 2007 - 10:57 #6
Perfekt!

Tak for det. Smid et svar så får du point
Avatar billede roenving Novice
13. marts 2007 - 11:02 #7
Velbekomme '-)
Avatar billede roenving Novice
13. marts 2007 - 11:15 #8
-- og tak for point ;~}
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester