【发布时间】:2011-08-01 13:03:03
【问题描述】:
我需要在 contenteditable div 中实现数字高亮(将来我会添加更复杂的规则)。问题是当我使用 javascript 替换插入新内容时,DOM 更改和 contenteditable div 失去焦点。我需要的是专注于当前位置的插入符号的 div,这样用户就可以毫无问题地输入,而我的功能简单地突出显示数字。谷歌搜索我认为Rangy 库是最好的解决方案。我有以下代码:
function formatText() {
var savedSel = rangy.saveSelection();
el = document.getElementById('pad');
el.innerHTML = el.innerHTML.replace(/(<([^>]+)>)/ig,"");
el.innerHTML = el.innerHTML.replace(/([0-9])/ig,"<font color='red'>$1</font>");
rangy.restoreSelection(savedSel);
}
<div contenteditable="true" id="pad" onkeyup="formatText();"></div>
问题是在函数结束工作重心回到 div 之后,但插入符号始终指向 div begin,我可以在任何地方键入,除了 div begin。还有Rangy warning: Module SaveRestore: Marker element has been removed. Cannot restore selection. 之后的console.log 类型
请帮我实现这个功能。我对另一个解决方案持开放态度,而不仅仅是 rangy 库。谢谢!
http://jsfiddle.net/2rTA5/ 这是 jsfiddle,但它不能正常工作(当我在我的 div 中输入数字时没有任何反应),不知道可能是我(第一次通过 jsfiddle 发布代码)或资源不支持 contenteditable。 UPD* 我在 stackoverflow 上读到了类似的问题,但解决方案不适合我的情况:(
【问题讨论】:
-
你的问题很难理解,或许你可以在jsfiddle.net放个demo
-
你指的是插入符号位置吗?
-
我将我的代码发布到 js fiddle,请参阅我的帖子。据我所知,这就是 restoreSelection 所做的。图书馆记住插入符号的位置并恢复它。
标签: javascript html range contenteditable rangy