【发布时间】:2015-04-03 02:30:18
【问题描述】:
我正在使用 The Great and Powerful Oz Tim Down 编写的一些 javascript,它在插入符号处插入东西。它工作得很好,但是我怎样才能将函数限制为只能在类名为“editor-text”的 div 中运行?
编辑:它还必须在 .editor-text div 中的其他元素(例如 H1)中工作。
Edit2:也必须在新行上工作。见http://jsfiddle.net/j5mv219L/
现场演示: http://jsfiddle.net/wfo7gcvh/
守则:
function pasteHtmlAtCaret(html) {
var sel, range;
if (window.getSelection) {
// IE9 and non-IE
sel = window.getSelection();
if (sel.getRangeAt && sel.rangeCount) {
range = sel.getRangeAt(0);
range.deleteContents();
// Range.createContextualFragment() would be useful here but is
// non-standard and not supported in all browsers (IE9, for one)
var el = document.createElement("div");
el.innerHTML = html;
var frag = document.createDocumentFragment(),
node, lastNode;
while ((node = el.firstChild)) {
lastNode = frag.appendChild(node);
}
range.insertNode(frag);
// Preserve the selection
if (lastNode) {
range = range.cloneRange();
range.setStartAfter(lastNode);
range.collapse(true);
sel.removeAllRanges();
sel.addRange(range);
}
}
} else if (document.selection && document.selection.type != "Control") {
// IE < 9
document.selection.createRange().pasteHTML(html);
}
}
【问题讨论】:
标签: javascript range selection