2010-12-17 179 views
3

我想写一个tinyMCE插件,允许嵌套sub和sup标签。TinyMCE移动光标

现在我写了一个命令,当你按下按钮/击中快捷键时,在光标处插入原始HTML''。但是,只有当我可以将光标移动到新标签的中间时,这才会起作用。

我似乎无法找到任何有关如何移动光标的文档。有一些建议的黑客,但他们很hacky。这并不难,因为据我了解,这是[b][i]按钮的工作原理。

有没有更好的方法来做到这一点?我怎样才能编写一个tinyMCE函数,让用户进入“子模式”或“sup模式”,并允许它们嵌套“sub”和“sup”模式?

谢谢!

回答

3

该函数将光标设置为指定的html元素。

// sets the cursor to the specified element, ed ist the editor instance 
// start defines if the cursor is to be set at the start or at the end 
setCursor: function (ed, element, start) { 

    var doc = ed.getDoc(); 
    if (typeof doc.createRange != "undefined") { 
     var range = doc.createRange(); 
     range.selectNodeContents(element); 
     range.collapse(start); 
     var win = doc.defaultView || doc.parentWindow; 
     var sel = win.getSelection(); 
     sel.removeAllRanges(); 
     sel.addRange(range); 
    } else if (typeof doc.body.createTextRange != "undefined") { 
     var textRange = doc.body.createTextRange(); 
     textRange.moveToElementText(element); 
     textRange.collapse(start); 
     textRange.select(); 
    } 
}, 

为了嵌套sups,你需要确保sups和subs可以嵌套。请检查extended_valid_elementsvalid_elements配置参数。 sub和sup可能不会被默认嵌套!您需要覆盖规则集的这部分内容。

+0

请帮忙。此代码在Opera(11.10,2092,Win32XP)中不起作用:未捕获的异常:[object DOMException] ... range.selectNodeContents(el); – 2011-04-25 13:48:47

+0

我担心歌剧不完全支持Tinymce。您可能想看看最新的tinymce beta源代码 - 内置函数将设置光标 - 也许这将适用于您的歌剧用例 – Thariama 2011-04-26 08:35:53

+0

我不知道发生了什么,但添加了几行代码,一切都变得好:) – 2011-04-26 14:40:10