我在网页上有一个表单,该表单使用TinyMCE 5
编辑其中一个字段。在我的配置中,TinyMCE
使用CodeMirror
来检查/编辑字段内容的html代码。当CodeMirror
开始时,它将光标定位在代码的开头,但是我想找到一种方法,如何将CodeMirror
中的初始光标位置设置为html代码中的位置到TinyMCE
中光标的位置。换句话说,如果光标位于例如当我调用TinyMCE
(通过按菜单面板上的“代码”按钮)在CodeMirror
中的表中时,我希望CodeMirror
将其光标设置为靠近{{ 1}}标签在html代码中。
我想到的解决方案是,在<table>
中的光标位置获取标签名称,然后启动TinyMCE
,在CodeMirror
中查找包含以下内容的行:标签,最后将光标定位到该行。但是我不太了解如何实现这一点。我应该编辑CodeMirror
还是其他破坏性较小的方法?
任何想法都欢迎!谢谢!
答案 0 :(得分:0)
经过研究,我找到了问题的答案。希望对其他人有帮助。
首先,我的问题中描述的功能已在CodeMirror
中实现。它由CodeMirror
选项saveCursorPosition
控制。如果将其设置为true
,则CodeMirror
会将光标定位到html代码中的位置,该位置对应于TinyMCE
编辑器中光标的位置,反之亦然。
但最有趣的是,以上所有方法均无效:)为了保存光标位置,tinymce-codemirror
插件将不可见的span
添加到了TinyMCE
个内容(<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中的相应位置之间跳转可以正常工作!