我尝试创建一系列内嵌文本模式,以使用<span>
标记TinyMCE(4.3.2)编辑器内容。我能够创建新的自定义格式并注册新的文本模式,但在尝试匹配嵌套模式时会出现问题。
这些自定义格式的TinyMCE初始化代码为:
formats: {
'innerFormat': {
inline: 'span',
classes: 'inner',
exact: true,
selector: 'span.inner'
},
'outerFormat': {
inline: 'span',
classes: 'outer',
exact: true,
selector: 'span.outer'
}
},
textpattern_patterns: [
{start: '{{', end: '}}', format: 'innerFormat'},
{start: '[[', end: ']]', format: 'outerFormat'}
]
我希望能够在编辑器中输入这一行:
[[outerText({{innerText}})]]
并收到此标记:
<span class="outer">outerText(<span class="inner">innerText</span>)</span>
但是TinyMCE在匹配innerFormat(&#34; {{}}&#34;)之后不会识别outerFormat(&#34; [[]]&#34;),留下我用:
[[outerText(<span class="inner">innerText</span>)]]
据我所知,这是由textpattern/plugin.js
文件中的这段代码引起的:(〜第101行)
rng = selection.getRng(true);
container = rng.startContainer;
offset = rng.startOffset;
text = container.data;
delta = space ? 1 : 0;
在内部格式匹配后,rng.startContainer返回的容器会立即从父<p>
更改为text
容器。
如何修改TinyMCE textpattern插件以在父块级元素中搜索文本模式而不是当前选择的容器?