在 tinyMCE 中,将格式应用于非编辑区域

In tinyMCE apply format to noneditabel areas

本文关键字:应用于 编辑 区域 格式 tinyMCE      更新时间:2023-09-26

我将tinyMCE与"不可编辑"插件一起使用。

当我在tinyMCE编辑器中标记一些文本(包括不可编辑的区域),然后将某些格式应用于此选择时,该格式将不会应用于不可编辑的片段。

例如:

我选择:

start Text  <span class="mceNonEditable" data-mce-contenteditable="false">not editable area</span> end text

我想让它大胆一点,结果是:

<strong>start Text  </strong><span class="mceNonEditable" data-mce-contenteditable="false">not editable area</span><strong> end text</strong>

我的期望和我需要的将是以下内容:

<strong>start Text  <span class="mceNonEditable" data-mce-contenteditable="false">not editable area</span> end text</strong>

我能做些什么来格式化不可编辑的片段?

(我使用微小的MCE 4.1.10)


我知道这是一个有点老的问题,但仍然作为该问题的第一个搜索结果之一弹出......
我们在团队中遇到了同样的问题,
我们通过下拉选择向内容添加了不可编辑的文本,就像发生的那样
当我们在编辑器中选择文本范围并尝试格式化时,不可编辑的元素被忽略了。
我通过将不可编辑的内容(span 元素)与另一个可编辑的跨度包装来解决它,现在当选择文本范围时,
外部范围将获取所选格式并影响内部范围(不可编辑)。

<span class="someClass"><span class="mceNonEditable">Non Editable Text</span></span>

* 外部元素必须具有 Tinymce 不会清除它的类。

tinymce论坛中的worakaround是操纵文件:/tinymce/classes/Formatter.js

在函数中:

function applyRngStyle(rng, bookmark, node_specific)
{
....
                        // Is it valid to wrap this item
                        // TODO: Break this if up, too complex
                        if (contentEditable && !hasContentEditableState && isValid(wrapName, nodeName) && isValid(parentName, wrapName) &&
                                !(!node_specific && node.nodeType === 3 &&
                                node.nodeValue.length === 1 &&
                                node.nodeValue.charCodeAt(0) === 65279) &&
                                !isCaretNode(node) &&
                                (!format.inline || !isBlock(node))) {
                            // Start wrapping
.....
}

我不得不取消注释"contentEditable &&!hasContentEditableState"

function applyRngStyle(rng, bookmark, node_specific)
{
....
                        // Is it valid to wrap this item
                        // TODO: Break this if up, too complex
                        // This are the changes that I made:
                        if (/*contentEditable && !hasContentEditableState &&*/ isValid(wrapName, nodeName) && isValid(parentName, wrapName) &&
                                !(!node_specific && node.nodeType === 3 &&
                                node.nodeValue.length === 1 &&
                                node.nodeValue.charCodeAt(0) === 65279) &&
                                !isCaretNode(node) &&
                                (!format.inline || !isBlock(node))) {
                            // Start wrapping
.....
}