【发布时间】:2013-07-04 01:47:59
【问题描述】:
有没有办法在 contenteditable div 中的选定文本前后插入类似于 bbcode 的文本?我已经看到很多关于 textarea 的答案,但代码不适用于 contenteditable div。不需要 IE 支持。
【问题讨论】:
标签: javascript contenteditable
有没有办法在 contenteditable div 中的选定文本前后插入类似于 bbcode 的文本?我已经看到很多关于 textarea 的答案,但代码不适用于 contenteditable div。不需要 IE 支持。
【问题讨论】:
标签: javascript contenteditable
我建议的方法是:
以下演示将适用于除 IE
代码:
function surroundSelection(textBefore, textAfter) {
if (window.getSelection) {
var sel = window.getSelection();
if (sel.rangeCount > 0) {
var range = sel.getRangeAt(0);
var startNode = range.startContainer, startOffset = range.startOffset;
var startTextNode = document.createTextNode(textBefore);
var endTextNode = document.createTextNode(textAfter);
var boundaryRange = range.cloneRange();
boundaryRange.collapse(false);
boundaryRange.insertNode(endTextNode);
boundaryRange.setStart(startNode, startOffset);
boundaryRange.collapse(true);
boundaryRange.insertNode(startTextNode);
// Reselect the original text
range.setStartAfter(startTextNode);
range.setEndBefore(endTextNode);
sel.removeAllRanges();
sel.addRange(range);
}
}
}
【讨论】:
document.execCommand("bold", false, null)。否则,你可以适应this answer。
如果我从您的 cmets 中了解了新目标,则您有一个选择并希望用一个元素将其包围。那么范围的 surroundContents 方法应该可以工作:
var selection = window.getSelection();
var range = selection.getRangeAt(0);
var strong = document.createElement('strong');
range.surroundContents(strong);
【讨论】: