childNodes.length

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • childNodes.length

    Hi Zusammen, der Firefox macht mir da irgendwie Probleme.
    Folgende Liste wird via php & mysql aus einer DB generiert.

    Code:
       <ul id = "menu">
        <li class = "header"><span>&nbsp;</span>Navigation</li>
    
        <li class = "menuItem"> <a href = "?action=home" id = "home" class = "normal" title = "{title}">HOME</a></li>
    
        <li class = "menuItem"> <a href = "?action=news" id = "news" class = "normal" title = "{title}"> NEWS &amp;
        FEATURES</a>
    
        <ul class = "submenu">
         <li class = "menuItemSelect">
         <a href = "?action=news&amp;headlines" id = "headlines" class = "mm" title = "Apple"> HEADLINES</a></li>
    
         <li class = "menuItemSelect"> <a href = "?action=news&amp;coming" id = "coming" class = "mm" title = "Apple">
         COMING SOON</a></li>
        </ul>
    
        </li>
        </ul>
    Leider liefert nur der IE nicht aber der Firefox die angeforderte Meldung
    Code:
    function collapseMenu(node) {
    	if (!document.getElementById) return false;
    	if (!document.getElementById("menu")) return false;
    	if (!node) node = document.getElementById("menu");
            alert(node.childNodes.length);
    	}
    Firefox liefert node.childNodes has no properties

    Weiss jemand was das soll?

    Danke
    derTrallala
    Manchmal verliert ma eben ... und manchmal gewinnen die Anderen

  • #2
    Re: childNodes.length

    Typ von node überprüft?
    Mit welchem Parameterwert wird die Funktion aufgerufen?

    Und sonst:
    DOM-Inspector nehmen, nachschauen. Auch die childNodes eines Javascript-Objektes und deren length-Eigenschaft kann man da nachschauen.
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      Code:
      function addLoadEvent(func) {
      	var oldonload = window.onload;
      	if (typeof window.onload != 'function') {
      		window.onload = func;
      	} else {
      		window.onload = function() {
      			oldonload();
      			func();
      		}
      	}
      }
      addLoadEvent(collapseMenu);
      nodeType=1

      derTrallala
      Manchmal verliert ma eben ... und manchmal gewinnen die Anderen

      Kommentar


      • #4
        DOM-Inspector ...?
        I don't believe in rebirth. Actually, I never did in my whole lives.

        Kommentar


        • #5
          Der zeigt mir das an ... allerdings hab ich damit noch nicht allzuhäufig gearbeitet
          Angehängte Dateien
          Manchmal verliert ma eben ... und manchmal gewinnen die Anderen

          Kommentar


          • #6
            Eigentlich wollte ich auf folgendes hinaus:
            Auf die UL gehen, und dann oben rechts (wo aktuell "Objekt - DOM Node" steht) die Javascript-Repräsentation dieses Elements auswählen.
            Dann zur Eigenschaft childNodes durchklicken, die wiederum öffnen, Eigenschaft length anschauen.


            Aber dem DOM-Abbild nach scheint's ja zu stimmen, UL hat Kindelemente, also müsste es auch childNodes und das eine length besitzen.

            Lässt für mich eigentlich nur den Schluss zu, dass node nicht das Element repräsentiert, welches du erwartest.

            Ich habe die Stelle
            Code:
            if (!node) node = ...
            im Verdacht. node wird vermutlich schon "irgendwas" sein, was nicht zu false evaluiert, deshalb wird ihm hier nicht die Rückgabe von getElementById zugewiesen - und dann versuchst du anschliessend Operationen auf einem Objekt durchzuführen, welches gar nicht das ist, welches du vor dir zu haben glaubst.
            Zuletzt geändert von wahsaga; 29.01.2007, 10:11.
            I don't believe in rebirth. Actually, I never did in my whole lives.

            Kommentar


            • #7
              Code:
              function addLoadEvent(func) {
               var oldonload = window.onload;
               if(typeof window.onload != 'function') {
                window.onload = func; // der erste Parameter gilt bei einigen Browsern als event
               }else{
                window.onload = function(){
                 oldonload();
                 func();
                }
               }
              }
              addLoadEvent(collapseMenu); // 
              
              function collapseMenu(node){  // node als erster Parameter und damit ein Event
               if(!document.getElementById("menu")) return false;
               if(!node) node = document.getElementById("menu"); // node ist ein event also !node === false 
               alert(node.childNodes.length); // event.childNodes hat keinen Wert. manche Browsers zählen,
               // da auch die Text-children also musst du prüfen was für welche
              }
              ein Lösungsansatz wäre, dass du function collapseMenu(e, node){ schreiben würdest oder aber du schreibst sowas:
              function addLoadEvent(func) {
              if(typeof window.onload == "function"){var oldonload = window.onload;}else{var oldonload = function(){};}
              window.onload = function(){oldonload();func();}
              }

              Es gibt sicher noch bessere Lösungen, aber ich habe im Moment keine Zeit eine zu suchen.

              MfG

              JMC

              Kommentar

              Lädt...
              X