0

在突出显示某些文本之前,我正在尝试使用 rangy 来保存插入符号的位置。但是,我认为因为我插入了 html,所以它在恢复插入符号时遇到了问题。这是代码:

var saved_selection = rangy.saveSelection( );

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

rangy.restoreSelection( saved_selection );

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

另外,我想知道是否可以通过单独使用插入符号的索引来设置插入符号。我编写了另一个对象 kb_input,它跟踪插入符号的位置、当前行中的偏移量和当前行号。所以,我想知道这是否也有帮助。

如果有人可以帮助我理解 contenteditable 标记中的插入符号位置和范围之间的关系,那足以让我继续前进。

4

2 回答 2

3

如果您使用 Rangy 1.3(仍处于 alpha 版本,但我正在研究它),您可以使用基于字符索引的方法,从而避免插入标记元素的需要:

// 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

于 2013-04-10T08:57:04.947 回答
1

您的问题的一部分答案是jQuery.html删除以前在元素内的所有内容(就像innerHTMLDOM 元素的属性一样)。来自jQuery 文档的jQuery.html(htmlString)片段:

当 .html() 用于设置元素的内容时,该元素中的任何内容都会被新内容完全替换。此外,在用新内容替换这些元素之前,jQuery 从子元素中删除了其他结构,例如数据和事件处理程序。

于 2013-04-10T00:11:19.420 回答