Quessir
Новичок
Вставка HTML в iframe с designMode="on"
Если ставить курсор в iframe, и только затем уже вставлять HTML, более-менее работает. Но если нет курсора, вываливается ошибка. Проблема в том что он берет getSelection() потом range и т.д. Как можно сделать так, чтобы он вставлял html в последню позицию курсора. пытался сделать focus(), еще хуже...
Вот функция...
В IE проблема еще хуже.
$('wysiwyg' + this.textareaID).contentWindow.document.selection.createRange().pasteHTML(html);
если делать так, то он вставляет код прям в начало основного body.
Если ставить курсор в iframe, и только затем уже вставлять HTML, более-менее работает. Но если нет курсора, вываливается ошибка. Проблема в том что он берет getSelection() потом range и т.д. Как можно сделать так, чтобы он вставлял html в последню позицию курсора. пытался сделать focus(), еще хуже...
Вот функция...
PHP:
insertNodeAtSelection: function(insertNode) {
var sel = $('wysiwyg' + this.textareaID).contentWindow.getSelection();
if (typeof sel != "undefined") {
var range = sel.getRangeAt(0);
} else {
var range = $('wysiwyg' + this.textareaID).contentWindow.document.createRange();
}
// 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) {
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);
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);
}
range.selectNode(insertNode);
range.collapse(false);
sel.addRange(range);
},
В IE проблема еще хуже.
$('wysiwyg' + this.textareaID).contentWindow.document.selection.createRange().pasteHTML(html);
если делать так, то он вставляет код прям в начало основного body.