我在网页上有一个表单,该表单使用TinyMCE 5
编辑其中一个字段。在我的配置中,TinyMCE
使用CodeMirror
来检查/编辑字段内容的html代码。当CodeMirror
开始时,它将光标定位在代码的开头,但是我想找到一种方法来将CodeMirror
中的初始光标位置设置为html代码中的位置,该位置对应于将光标移到TinyMCE
。换句话说,如果光标位于例如当我调用TinyMCE
(通过按菜单面板上的“代码”按钮)在CodeMirror
中的表格内时,我希望CodeMirror
将其光标设置为在html-中的<table>
标签附近或内部代码。
我想到的解决方案是,在TinyMCE
中的光标位置获取标签名称,然后启动CodeMirror
,在CodeMirror
中找到包含该标签的行,最后将光标定位到那条线。但是我不太了解如何实现这一点。我应该编辑codemirror/plugin.js
还是其他破坏性较小的方法?
欢迎提出任何想法!谢谢!
CodeMirror
中实现。它由CodeMirror
选项saveCursorPosition
控制。如果将其设置为true
,则CodeMirror
将光标定位到html代码中的位置,该位置对应于TinyMCE
编辑器中光标的位置,反之亦然。但是最有趣的是,以上所有方法均无效:)为了保存光标位置,tinymce-codemirror
插件将不可见的span
添加到了TinyMCE
内容的html代码中( <span style="display: none;" class="CmCaReT">�</span>
)。在激活CodeMirror
实例之前,插件会用不可见的字符(UTF代码= 0)替换该范围,否则span
标记将在CodeMirror
中可见。
此替换由以下代码执行(在与source.html
和plugin.js
位于同一文件夹的plugin.min.js
文件中):html.replace(/<span\s+style="display: none;"\s+class="CmCaReT"([^>]*)>([^<]*)<\/span>/gm, String.fromCharCode(chr))
。正则表达式应该找到所有这些span
-s,但是找不到!原因是style
和class
属性的显示顺序相反:class
是第一个,然后是style
。 (我认为这是浏览器带来的惊喜-我使用Firefox。)
现在,我们必须将正则表达式更改为/<span\s+(style="display: none;")*\s*(class="CmCaReT")\s+(style="display: none;")*([^>]*)>([^<]*)<\/span>/gm
,它会捕获span
标记,而不考虑其属性的顺序。
因此,现在在TinyMCE和CodeMirror中的相应位置之间跳转可以正常工作!