我如何(使用jquery或其他)在我的contenteditable div的光标/插入位置插入html:
<div contenteditable="true">Hello world</div>
例如,如果光标/插入符号位于“hello”和“world”之间,然后用户单击一个按钮,例如“插入图像”,然后使用javascript,则会在“<img src=etc etc>
之间插入”你好“和”世界“。我希望我已经明确表示= S
非常感谢示例代码,非常感谢!
答案 0 :(得分:10)
以下函数将在所有主流桌面浏览器的光标位置插入DOM节点(元素或文本节点):
function insertNodeAtCursor(node) {
var sel, range, html;
if (window.getSelection) {
sel = window.getSelection();
if (sel.getRangeAt && sel.rangeCount) {
sel.getRangeAt(0).insertNode(node);
}
} else if (document.selection && document.selection.createRange) {
range = document.selection.createRange();
html = (node.nodeType == 3) ? node.data : node.outerHTML;
range.pasteHTML(html);
}
}
如果您想要插入HTML字符串:
function insertHtmlAtCursor(html) {
var sel, range, node;
if (window.getSelection) {
sel = window.getSelection();
if (sel.getRangeAt && sel.rangeCount) {
range = window.getSelection().getRangeAt(0);
node = range.createContextualFragment(html);
range.insertNode(node);
}
} else if (document.selection && document.selection.createRange) {
document.selection.createRange().pasteHTML(html);
}
}
我根据类似问题的回答对此进行了调整:How to find cursor position in a contenteditable DIV?
答案 1 :(得分:2)
使用contenteditable
,您应该使用execCommand
。
尝试document.execCommand('insertImage', false, 'image.jpg')
或document.execCommand('insertHTML', false, '<img src="image.jpg" alt="" />')
。第二个在较旧的IE中不起作用。
答案 2 :(得分:0)
在此代码中,我只是将html代码替换为(“)到(')
使用以下语法:
$("div.second").html("your html code and replace with (")to(') ");
答案 3 :(得分:-1)
我建议使用jquery插件a-tools
这个插件有七个功能:
* getSelection – return start, end position, length of the selected text and the selected text. return start=end=caret position if text is not selected;
* replaceSelection – replace selected text with a given string;
* setSelection – select text in a given range (startPosition and endPosition);
* countCharacters – count amount of all characters;
* insertAtCaretPos – insert text at current caret position;
* setCaretPos – set cursor at caret position (1 = beginning, -1 = end);
* setMaxLength – set maximum length of input field. Also provides callback function if limit is reached. Note: The function has to have a number as input. Positive value for setting of limit and negative number for removing of limit.
您需要的是 insertAtCaretPos :
$("#textarea").insertAtCaretPos("<img src=etc etc>");
可能有一个缺点:这个插件只适用于textarea en input:text elements,因此可能存在与contenteditable的冲突。