textnode die digitalen Abenteuer des Andreas T.

25Jul/070

textNode erstellen mit JavaScript

Da viele Leute auf der Suche nach dem Umgang mit TextNodes oft hier landen, werde ich mich diesem Thema mal annehmen. Einfacher und von der Geschwindigkeit besser als ueber DOM-Operationen kann man auch die Eigenschaft innerHTML benutzen um Text an eine bestimmte Stelle des DOMs zu setzen, aber hier wollen wir uns anhand eines Beispiels die Methode mit createTextNode ansehen, die von vielen als sauberer erachtet wird:

Zuerst wird ein Text-Objekt erstellt und in einer Referenz gespeichert:

var textNode = document.createTextNode("Inhalt");

Mit appendChild wird der neue Kotenpunkt an einen bestehenden angehaengt. Ueber nodeValue kann man dann auf den Inhalt des Knotens zugreifen:

container.appendChild(textNode);
alert( container.firstChild.nodeValue );

Hier ist der vollstaendige Beispielcode. Hier wird auch gezeigt, wie man eine Node aus dem DOM wieder entfernt:


<head>
<title>textNode erstellen mit JavaScript</title>

<script type="text/javascript">
  function init() {
    var textNode = document.createTextNode("Inhalt");
    var container = document.getElementById('container');
    container.appendChild(textNode);
    alert( container.firstChild.nodeValue );
  }

  function remove() {
    var container = document.getElementById('container');
    container.removeChild(container.firstChild);
  }
</script>

</head>

<body onload="init()">

  <p id="container"></p>
  <a href="javascript:remove()">entfernen</a>

</body>
10May/070

div-Layer und Flash-Movies

Manche Probleme tauchen unvermittelt auf und kosten Unmengen an Zeit. Ein solches ist z.B. die Aufgabe in einem HTML-Layout ein div-Layer ueber einen Flashfilm zu positionieren. Die Positionierung per position: absolute und z-index sollte kein Problem darstellen, doch verdeckt der Flashfilm in fast allen Browsern die eigentlich darueber angeordnete Ebene, was schlichtweg ein Bug zu sein scheint.

Die Loesung des Problems ist ganz einfach und heisst:
wmode = transparent

Dadurch, dass man den Hintergrund des Flashfilms transparent setzt, funktioniert die Anzeige der Layers wieder in der richtigen Reihenfolge. Der Code sieht so aus:

im Tag object

<param name="wmode" value="transparent">

im Tag embed

wmode="transparent"

Und wer das swfObject benutzt:

so.addParam('wmode', 'transparent');

Auf manchen Systemen scheint das Flash-PlugIn Probleme zu haben die Transparenz darzustellen (ich habe von Mac und Linux gehoert). Ob dieser Workaround dann noch funktioniert, konnte ich nicht in Erfahrung bringen.

Weiterhin gibt es Bugs in Flashfilmen, wenn wmode = transparent gesetzt ist. Teilweise gab es merkwuerdige Effekte beim Ausfuellen von Formularen. z und y waren bei der Eingabe in Textfeld-Komponenten vertauscht, Zeichen wie das @ waren gar nicht mehr auf der Tastatur zu finden. Wer also Formulare in seinem Flashfilm hat, sollte de Hintergrund von Flash nicht auf transparent schalten! Hier lauern boese Bugs!