Thomas: IE und FirstChild ;-(

Hallöchen...

Ich habe ein Problem mit firstChild und IE. Ich habe mir eine TAG-Library geschrieben, die ein ganz bestimmtes (von mir selbst definiertes und nicht durch die DOM definiertes) Tag-Element mittels getElementsByName aus der DOM fischt. Dessen Inhalt frage ich nun per firstChild ab, packe dann alle gefundenen Texte in einen JSON String und schicke das zum Server. Der Extrahiert die Texte und schickt, den gleichen JSON String (nur jetzt mit neuen Texten [nutzte ich zum Beipsiel für On The Fly Übersetzungen ) zurück...

Das ganze funktioniert so gut, das ich das im größeren Maßstab einsetzen wollte, scheitere nun aber am IE... der will ums verrecken meinen eigenen TAG (firstChild == null) nicht auswerten...

habt Ihr ne Idee...

Hier eine stark vereinfachter Code...

<html> <body> <h1><font color="#FFF000"><mytext>KLAUS 4</mytext></font></h1> <h1><font color="#CC0000"><mytext>KLAUS 3</mytext></font></h1> <h1><font color="#AA0000"><mytext>KLAUS 2</mytext></font></h1> <h1><font color="#880000"><mytext>KLAUS 1</mytext></font></h1> <script>  // !!!! Funktioniert im IE und im FF !!!!!  var elem = document.getElementsByTagName("mytext");  for ( var index = 0; index < elem.length; index ++ )  {   var innerText = elem[index].parentNode.innerHTML;

innerText = innerText.replace("<MYTEXT>",  "" );   innerText = innerText.replace("</MYTEXT>", "" );   innerText = innerText.replace("<mytext>",  "" );   innerText = innerText.replace("</mytext>", "" );

alert( innerText );  }

// !!!! Funktioniert nicht im EE !!!!!  var elem = document.getElementsByTagName("mytext");  for ( var index = 0; index < elem.length; index ++ )  {   var innerText = elem[index].firstChild.data   alert( innerText );  } </script> </body> </html>

  1. Lieber Thomas,

    wenn der IE in einem HTML-Dokument kein <mytext>-Element einfügt, dann ist das meines Erachtens korrekt. Solltest Du explizit einen XHTML-Doctype angegeben haben, dann wäre es auch da nach meinem Verständnis von der DTD zu XHTML 1 strict korrekt. Du kannst aber stattdessen ein <div> oder <span> mit einer ID oder von mir aus auch class belegen, welches Deine Funktion dann erhascht, um das Übrige mit dem Inhalt zu veranstalten.

    <h1><font color="#FFF000"><mytext>KLAUS 4</mytext></font></h1>

    Dazu sage ich "BÄH!".

    innerText = innerText.replace("<MYTEXT>",  "" );
      innerText = innerText.replace("</MYTEXT>", "" );
      innerText = innerText.replace("<mytext>",  "" );
      innerText = innerText.replace("</mytext>", "" );

    Das würde ich so schreiben: innerText = innerText.replace(/<\/?mytext>/gi, "");

    Liebe Grüße aus Ellwangen,

    Felix Riesterer.

    --
    ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
    1. Hay Felix!

      Der IE fügt brav den TAG ein... man kann ihn ja sogar referenzieren... nur gibt dieser eben keine NODES preis...

      Hole ich mir den TAG mit getElementsByTagName(*) und lasse mir die INNERHTML Inhalte anzeigen, dann steht dort auch mytext...

      Was ich nicht verstehen mag, das wenn ich den TAG schon abfragen kann , eben keinen Inhalt (firstChild.data oder auch innerHTML) bekomme. Ich halte das für´ne Bug... der IE scheint keine NODES für TAGs die nicht in der HTML Spec. einhalten sind anzulegen...

      Das Beispiel zeigt ja, das der IE prinzipiell damit klar kommt...

      Den Code darfst Du nur als Beispiel verstehen... die RegExpression würde ich sicherlich auch nutzen...

      1. Hi,

        Ich halte das für´ne Bug... der IE scheint keine NODES für TAGs die nicht in der HTML Spec. einhalten sind anzulegen...

        Selbst erfundene Tags in einem als HTML interpretierten Dokument sind in der Tat ein Bug.

        MfG ChrisB

        1. Okay - Okay...
          Der Code ist nur ein Beispiel... wie läuft den so was mit Framework´s...
          Ich denke nur an so was wie SPRY...
          Die fügen auch ein neuen TAG in die DOM ein und das ist sicher nichts aufregendes...

  2. Danke für Eure Hilfe... Habe mir anderweitig geholfen (Zeitdruck)
    Gruß Thomas