Schorsch: Dom Klettereien: Absturz! range.startContainer

Guten Tag

Ich möchte den Node, indem sich selektierter Text befindet, verändern.
Mittels "range.startContainer" versuche ich darauf zuzugreifen, kann aber anschliessend die setAttribute() Methode nicht verwednen.

Warum?

Danke im Voraus
Schorsch

NB: Das ganze muss nur im Firefox klappen.

Was bisher geschah:

// Habe ein Range
 var range = window.getSelection().getRangeAt(0);
 // Jetzt habe ich den Parent Node vom Range oder??
 var container = range.startContainer;
 // Nun möchte ich diesen verändern:
 /* Funktioniert nicht! Warum??? */
 //container.setAttribute("align", "center");

/* Working Around */
 // Mache ein neuer Node
 var newNode = document.createElement("div");
 // Mit der ID blah
 newNode.setAttribute("id", "blah");
 // Packe diesen Node exakt um meinen Range herum
 newNode.appendChild(range.extractContents());
 range.insertNode(newNode);
 // Hole mein blah
 var blah = document.getElementById("blah");
 // Und gehe nun zu seinen Eltern,
 // Welche dieselben wie container sein müssten oder?!?
 var eltern = blah.parentNode;
 // Jetzt kann ich die eltern bearbeiten...
 eltern.setAttribute("align", "center");
 // Weiter hole ich den Inhalt von blah,
 // Hänge diesen als Textnode den Eltern an
 // Und lösche blah ...

  1. hallo

    kein plan, aber die dok ist ziemlich gut http://www.mozilla.org/docs/dom/domref/dom_shortIX.html

    gruss

    --
    no strict; no warnings;
    1. kein plan, aber die dok ist ziemlich gut http://www.mozilla.org/docs/dom/domref/dom_shortIX.html

      Dort steht noch:
      "range.setStart(startNode,startOffset);"
      "range.setEnd(endNode,endOffset);"
      Vielleicht braucht "range.startContainer;" dieses setStart und setEnd.
      Nur, da ich von einer Markierung im Dokument ausgehe, kenne ich ja weder startNode, noch endNode...

      Also bleibt die Frage:
      Wie kann ich die Nodes verändern, in dessen Kinder man eine Selektion tätigte? Wie kann ich auf das Elternelement einer Selektion zugreifen?
      wie bringe ich "range.startContainer" zum laufen?

      Gruss und tnx
      Schorsch

  2. ah ja ;-) und mozilla und firefox sind ungefähr gleich, was das anbetrifft, ich würde aber im mozilla programmieren, weil der bessere integrierte dev tools für sowas hat z.b. auch den DOM inspektor.

    gruss

    --
    no strict; no warnings;
  3. Ich möchte den Node, indem sich selektierter Text befindet, verändern.
    Mittels "range.startContainer" versuche ich darauf zuzugreifen, kann aber anschliessend die setAttribute() Methode nicht verwednen.

    Warum?

    Ich glaube, dass der "Container" zwar schon irgendwie den Behälter liefert, worin die Selection gemacht wurde, aber dieser Behälter (Textnode?) lässt sich nicht mit einem Attribut versehen.

    Gehe noch ein Ast höher mit:

    parent = range.startContainer.parentNode;

    Dann hast du "ein richtiger" node, den du zum Beispiel mit:

    parent.setAttribute("style", style);

    verändern kannst.