Dom Klettereien: Absturz! range.startContainer
Schorsch
- javascript
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 ...
hallo
kein plan, aber die dok ist ziemlich gut http://www.mozilla.org/docs/dom/domref/dom_shortIX.html
gruss
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
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
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.