Metaphore: Schleife über getElementsByTagName("a") (IE-Bug?)

Moin,

ich habe folgenden Code, der im IE 6.0 nicht funktioniert:

----------------------------------

  
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
<html>  
<head>  
<title>Unbenanntes Dokument</title>  
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">  
</head>  
  
<body>  
<a href="http://www.gmx.de">Der erste</a>  
<a href="http://www.yahoo.de"> </a>  
<a href="http://www.hassenichjesehen.de">Der letzte</a>  
<br>  
Javascript-Output:<br>  
<script language="JavaScript" type="text/javascript">  
 //Alle Links durchsuchen  
 var AlleLinks = document.getElementsByTagName("a");  
 for (var i = 0; i < AlleLinks.length; i++) {  
   document.write (AlleLinks[i].firstChild.nodeValue + " | " + AlleLinks[i].firstChild.nodeType + "<\/BR>");  
 }  
</script>  
  
</body>  
</html>  

----------------------------------

Das Problem ist, dass beim zweiten a-Tag (Yahoo) das Script ohne FM vom IE einfach abgebrochen wird. Die Umstände erfordern leider aber nunmal, dass ich das a-Element finde indem ich es über seinen Inhalt "Der letzte" identifiziere.

  1. var AlleLinks = document.getElementsByTagName("a");

    du kannst natürlich auch auf document.links zugreifen.

    Das Problem ist, dass beim zweiten a-Tag (Yahoo) das Script ohne FM vom IE einfach abgebrochen wird.

    Bist du sicher das keine Fehlermledung kommt? Bei mir kommen zwei.
    Das Problem ist ein übliches Problem, du verwendest etwas ohne zu prüfen, ob es überhaupt vorhanden ist.

    Struppi.

    1. Hallo Struppi,

      ja - ich bekomme keine Fehlermeldungen. Und in Opera bspw. funktioniert es. Ich habe mir das schon gedacht, dass es an dem fehlenden Child-Node liegt..... aber -

      Ich hatte schon mal folgendes probiert:

        
      ...  
      if (AlleLinks[i].hasChildNodes){  
         //Zugriff auf Node  
       }  
      ...  
      
      

      Welche FM bekommst Du denn?

      okay - document.links, werde ich bevorzugen.

      Schöne Grüße
      Metaphore

      1. Liebe(r) Metaphore,

        ja - ich bekomme keine Fehlermeldungen.

        hast Du diese denn Deinem IE abgewöhnt?

        Liebe Grüße aus Ellwangen,

        Felix Riesterer.

        --
        ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
        1. hast Du diese denn Deinem IE abgewöhnt?

          Andere Fehlermeldungen bekomme ich ja auch (zum Beispiel das immer wiederkehrende Object erwartet *aargh)

          Welche FMs bekommt Ihr denn?

          Shcöne Grüße
          Metaphore (m)

      2. Hallo,

        ...
        if (AlleLinks[i].hasChildNodes){

          
        hasChildNodes ist eine Methode, also musst du eckige Klammern dahinter setzen, um diese auszuführen. Alternativ könntest du natürlich auch prüfen, ob firstChild existiert.  
          
          
        mfg. Daniel
        
        -- 
        [Experten raten von der Verwendung des Internet Explorers ab!](http://web.oesterchat.com/internet-explorer/)  
        [Mein SELF-stylesheet](http://danielrichter.da.funpic.de/SELFForumsCSS.html) | [Darum Firefox!](http://www.firefox-love.de/)  
        [Selfcode](http://forum.de.selfhtml.org/cgi-bin/selfcode.pl): [ie:{ fl:( br:> va:) ls:& fo:) rl:( n4:# ss:) de:> js:) mo:} zu:}](http://www.peter.in-berlin.de/projekte/selfcode/?code=ie%3A%7B+fl%3A%28+br%3A%3E+va%3A%29+ls%3A%26+fo%3A%29+rl%3A%28+n4%3A%23+ss%3A%29+de%3A%3E+js%3A%29+mo%3A%7D+zu%3A%7D)
        
        1. hi,

          hasChildNodes ist eine Methode, also musst du eckige Klammern dahinter setzen

          Du meinst runde.

          gruß,
          wahsaga

          --
          /voodoo.css:
          #GeorgeWBush { position:absolute; bottom:-6ft; }
          1. Du meinst runde.

            Ha!

            Ich danke Euch! Jetzt funktioniert es!!! *freu*

              
            <script language="JavaScript" type="text/javascript">  
             //Alle Links durchsuchen  
             for (var i = 0; i < document.links.length; i++) {  
               if(document.links[i].hasChildNodes()){  
                document.write(i + "<\/BR>");  
                document.write (document.links[i].href + " | " + document.links[i].firstChild.nodeValue + "<\/BR>");  
               }  
             }  
            </script>  
            
            

            Ich beschäftige mich nur sporadisch mit JavaScript und muss sagen, dass 95% meiner Fehler immer Syntax-Fehler waren (Es hat auch sehr lange gedauert bis ich gechecked habe, dass Groß und Kleinschreibung relevant ist!!!)

            Vielen Dank nochmal
            Schöne Grüße
            Metaphore

          2. Hallo,

            hasChildNodes ist eine Methode, also musst du eckige Klammern dahinter setzen

            Du meinst runde.

            Oops, ja du hast Recht. Schon doof wenn man was anderes schreibt als man denkt ;-)

            mfg. Daniel