恢复插入位置

时间:2013-04-09 22:49:48

标签: javascript parsing range

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

var saved_selection = rangy.saveSelection( );

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

rangy.restoreSelection( saved_selection );

它一直说已经删除了标记元素。是不行,因为我正在插入HTML?

我想知道,或者,如果我可以通过使用插入符号的索引来设置插入符号。我写的另一个对象kb_input跟踪插入位置,当前行的偏移量和当前行号。所以,我想知道这是否也有帮助。

如果有人可以帮助我理解满足标签中的插入位置与范围之间的关系,那就足以让我继续前进。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

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

  

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