James: Anzahl der von getElementsByTagName immer null?

hallo

ich bin neu in javascript und hatte gerade ein tutorial gelesen in dem konstruktionen wie document.getElementById('Hello').getElementsByTagName('dt'); erlaubt sind.

<html>  
<head>  
<title>Testscript</title>  
[code lang=javascript]<script type="text/javascript">  
  
function test() {  
   Nodedf = document.getElementById('Hello').getElementsByTagName('dt');  
   window.alert(Nodedf.length);  
}  
</script>

</head>
<body onload='test();'>

<p id='Hello'>
<dl>
  <dt>Hello</dt><dd>Du da</dd>
  <dt>Hello</dt><dd>Dda</dd>
  <dt>Hello</dt><dd>Dda</dd>
  <dt>Hello</dt><dd>Dda</dd>
  <dt>Hello</dt><dd>Dda</dd>
</dl>
</p>
</body>
</html>[/code]

Die Opera Fehlerkonsole sagt mir wenn ich das onload weglassen würde und das normal ohne funktion reinschreibe: Uncaught exception: TypeError: Cannot convert 'document.getElementById('Hello')' to object, so wie es hier steht gibt es keine fehlermeldug, aber das ergebnis ist null?

Was muss ich tun, damit ich ein richtiges Ergebnis bekomme? (5)

danke im voraus

  1. Hallo,

    <p id='Hello'>
    <dl>
      <dt>Hello</dt><dd>Du da</dd>
      <dt>Hello</dt><dd>Dda</dd>
      <dt>Hello</dt><dd>Dda</dd>
      <dt>Hello</dt><dd>Dda</dd>
      <dt>Hello</dt><dd>Dda</dd>
    </dl>
    </p>

    Du kannst keine dl-Elemente in p-Elemente schachteln. p darf nur http://de.selfhtml.org/html/referenz/elemente.htm#inline_elemente@title=Inline-Elemente und Text enthalten. Der HTML-Parser des Browsers schließt automatisch das p-Element, sobald er den dl-Start-Tag einliest. Der entstehende DOM-Baum sieht so aus (wie du auch z.B. in Firebug oder Web Inspector sehen kann):

    body
    \_ p
    \_ dl
       \_ dt
     usw.

    dl ist demnach kein Kindelement von p.
    Die dt-Elemente sind somit auch keine Nachfahrenelement von p.
    Also gibt document.getElementById('Hello').getElementsByTagName('dt') logischerweise eine leere Liste zurück.

    Was muss ich tun, damit ich ein richtiges Ergebnis bekomme? (5)

    Korrektes HTML schreiben, also die Verschachtelungsregeln von Elementen beachten.

    p ist kein Element zur Gruppierung anderer http://de.selfhtml.org/html/referenz/elemente.htm#block_elemente@title=Blockelemente. div, section, article, header, footer, nav, aside usw. sind dafür geeignet. Siehe auch Sectioning.

    Mathias

    1. Mathias

      Danke für deine Antwort. Da war ich wohl wieder zu schnell beim ausprobieren und hab nicht nachgedancht...