我正在使用很棒的Rangy 库。而且我还使用 Tim Down 的函数将 HTML 节点插入到 contenteditable DIV 中:
function insertNodeAtCaret(node) {
var sel = rangy.getSelection();
if (sel.rangeCount) {
var range = sel.getRangeAt(0);
range.collapse(false);
range.insertNode(node);
range.collapseAfter(node);
sel.setSingleRange(range);
}
}
现在,这在 Chrome 中可以正常工作并且符合预期。然而在 FF 和 Opera 中存在不同的行为。在 Chrome 中,HTML 节点插入到 contenteditable 中,插入符号保留在此 HTML 节点中,因此当用户继续输入时,他所有的输入都在插入的 HTML 节点中。
在 Opera 和 Firefox 中,插入符号位于插入的 HTML 节点之外,当用户继续输入时,输入的字符不在 HTML 节点内。
我的代码需要“Chrome 方式”的工作方式。您能帮我在 FF 和 Opera 中实现相同的行为吗?
用于测试的工作 jsFiddle 在这里:http: //jsfiddle.net/Er5DH/2/(当您在 contenteditable 中按“x”键时,它会插入红色的 SPAN 元素。在 Chrome 中,当您继续输入字符时,字符为红色,如预期。但在 FF 和 Opera 中,“x”键按下后的下一个键入的字母是黑色的 - 不需要)
感谢您的任何帮助和提示。