【发布时间】:2010-12-02 20:17:31
【问题描述】:
我有一个可编辑的 div,我正在使用一个按钮将图像插入到 div 中。现在,我只是在做 document.getElementById('elementid').innerHTML。 += ;为了将图像添加到 div 的末尾。我想输入插入符号所在的图像。我该怎么做呢?
谢谢
【问题讨论】:
标签: javascript html
我有一个可编辑的 div,我正在使用一个按钮将图像插入到 div 中。现在,我只是在做 document.getElementById('elementid').innerHTML。 += ;为了将图像添加到 div 的末尾。我想输入插入符号所在的图像。我该怎么做呢?
谢谢
【问题讨论】:
标签: javascript html
在插入符号处插入一个元素并不难。以下函数在所有主流浏览器中的插入符号处(或在选择的末尾,如果选择了内容)插入一个节点:
function insertNodeAfterSelection(node) {
var sel, range, html;
if (window.getSelection) {
sel = window.getSelection();
if (sel.getRangeAt && sel.rangeCount) {
range = sel.getRangeAt(0);
range.collapse(false);
range.insertNode(node);
}
} else if (document.selection && document.selection.createRange) {
range = document.selection.createRange();
range.collapse(false);
html = (node.nodeType == 3) ? node.data : node.outerHTML;
range.pasteHTML(html);
}
}
【讨论】:
我讨厌听起来消极,但这太难了,太荒谬了。您必须处理 IE 和其他,并且实现方式大不相同。但它变得超级困难的地方是,如果您单击一个按钮插入图像,您将失去焦点和插入符号的位置,因此您需要使用一些 onblur 书签功能记住该位置(再次,IE 不同)。如果您的可编辑内容位于 iframe 中并保持自己的焦点,那么焦点就不是问题了。 (注意:这里不贬低 IE,实际上我更喜欢他们的实现而不是 W3C 标准 drek。)
您可以查看一些开源文本编辑器以获取线索和提示。但是您会发现处理这些简单任务的代码量很大。
【讨论】:
Range 在大多数方面都大大优于TextRange,除了移动边界以包含单词和移动到文档中的相邻文本。选择对象没有标准(WHATWG 正在工作),但 IE 的选择在其他浏览器中没有任何标准。
【讨论】: