2013-04-09 78 views
0

我试图用四肢修长保存的插入符位置之前,我想强调一些文字。但是,我认为,因为我插入HTML,它有恢复插入符号的问题。这里的代码:恢复插入位置

var saved_selection = rangy.saveSelection(); 

$("#code").html(code_hl.highlight( $("#code").text(), 
             -1, 
             -1)); 

rangy.restoreSelection(saved_selection); 

它一直说标记元素已被删除。它不工作,因为我插入HTML?

我不知道,或者,如果我可以使用插入符号的指数本身设置插入符。还有另一个我写的对象,kb_input,用于跟踪插入符的位置,当前行的偏移量和当前行号。所以,我想知道这是否也有帮助。

如果有人可以帮助我了解在CONTENTEDITABLE标签和范围的一个插入位置之间的关系,这将是足以让我去。

+0

我写了code_hl对象,只改变了“代码”内部的内容。你是这个意思吗? – tay10r 2013-04-10 00:05:18

+0

我重读了你的问题,并意识到我的[现在删除]评论已关闭。如果你改变'innerHTML'或'innerText/textContent',那么你失去了所有的子节点,我认为这是发生在这里的事情。 – 2013-04-10 00:09:07

+0

还好,至少现在我知道为什么它不工作 – tay10r 2013-04-10 00:11:15

回答

3

如果使用瘦长1.3(仍在阿尔法,但我的工作就可以了),你可以改用基于索引字符的方法,从而避免了插入标记元素的需要:

// Save the selection by character index 
bookmark = rangy.getSelection().getBookmark(editableEl); 

// Do stuff that changes the editable content... 

// Restore the selection 
rangy.getSelection().moveToBookmark(bookmark); 

演示:http://rangy.googlecode.com/svn/trunk/demos/bookmark.html

+0

我试过了,但插入符要么飞所有的地方还是不能移动:/我仍然得到不同的结果,让我肯定它不是导致错误的其它代码。 – tay10r 2013-04-10 17:22:56

+0

我认为唯一的问题是,我不能再输入新行,并且遇到了我编写的解析器(两个仍在复制页面上工作)的问题。 – tay10r 2013-04-10 17:42:42

+0

你的图书馆工作正常,我发现我遇到的错误是从切换到contenteditable。谢谢! – tay10r 2013-04-10 19:19:15

1

您的问题的答案的一部分是,jQuery.html删除以前在元素内的所有内容(就像DOM元素的innerHTML属性)。从the jQuery docs on jQuery.html(htmlString)片段:

当html的()被用于设置一个元素的内容,即该元素是 任何内容完全是由新的内容替换。 另外,jQuery的去除其它构建体如从与 新内容替换那些元件之前的子元素数据和事件 处理程序。

+0

谢谢你,杰夫 – tay10r 2013-04-10 00:13:18