Hi @ all
Ich will einen text an der Stelle in einem editierbaren iFrame einfügen, an der der Besucher einen anderen Text makiert habe.
Um dieses Problem zu lösen habe ich bei SELFHTML nach möglichen Lösungen gesucht jedoch nichts gefunde. Anschließend habe ich nocheinmal im Internet gesucht und bin auf folgenden Script gestoßen:
Jedoch habe ich ein verständniss Problem da ich sowelche Befehle wie getRangeAt(0) nicht kenne. Auch die suche bei SELFHTML hat nichts gebracht.
Was hat es sich mit diesem befehl und generell mit den Range befehlen auf sich (substr(0,pos);, addRange(range); [...])
Vielen Dank
Pat-ro
Ich will einen text an der Stelle in einem editierbaren iFrame einfügen, an der der Besucher einen anderen Text makiert habe.
Um dieses Problem zu lösen habe ich bei SELFHTML nach möglichen Lösungen gesucht jedoch nichts gefunde. Anschließend habe ich nocheinmal im Internet gesucht und bin auf folgenden Script gestoßen:
PHP-Code:
function insertNodeAtSelection(win, insertNode)
{
// get current selection
var sel = win.getSelection();
// get the first range of the selection
// (there's almost always only one range)
var range = sel.getRangeAt(0);
// deselect everything
sel.removeAllRanges();
// remove content of current selection from document
range.deleteContents();
// get location of current selection
var container = range.startContainer;
var pos = range.startOffset;
// make a new range for the new selection
range=document.createRange();
if (container.nodeType==3 && insertNode.nodeType==3) {
// if we insert text in a textnode, do optimized insertion
container.insertData(pos, insertNode.nodeValue);
// put cursor after inserted text
range.setEnd(container, pos+insertNode.length);
range.setStart(container, pos+insertNode.length);
} else {
var afterNode;
if (container.nodeType==3) {
// when inserting into a textnode
// we create 2 new textnodes
// and put the insertNode in between
var textNode = container;
container = textNode.parentNode;
var text = textNode.nodeValue;
// text before the split
var textBefore = text.substr(0,pos);
// text after the split
var textAfter = text.substr(pos);
var beforeNode = document.createTextNode(textBefore);
var afterNode = document.createTextNode(textAfter);
// insert the 3 new nodes before the old one
container.insertBefore(afterNode, textNode);
container.insertBefore(insertNode, afterNode);
container.insertBefore(beforeNode, insertNode);
// remove the old node
container.removeChild(textNode);
} else {
// else simply insert the node
afterNode = container.childNodes[pos];
container.insertBefore(insertNode, afterNode);
}
range.setEnd(afterNode, 0);
range.setStart(afterNode, 0);
}
sel.addRange(range);
};
Was hat es sich mit diesem befehl und generell mit den Range befehlen auf sich (substr(0,pos);, addRange(range); [...])
Vielen Dank
Pat-ro
Kommentar