使用 CKEditor 动态主体颜色
我在 CKEditor 上遇到一个问题想要解决。我使用 jQuery 颜色选择器将背景颜色添加到 DIV 标签。然后我允许用户使用 CKEditor 编辑 Div 标签内容。但是,我注意到没有一种简单的方法可以获取 div 标签的背景颜色,然后在编辑器加载时将其设置为 CKEditor 的背景颜色。
我已经阅读了 bodyClass 和 bodyId,但不认为这些可以解决我的问题。我没有类元素,但有一个内联样式声明,就像
<div class="tp-header" style="background-color:#CCCCCC;">content</div>
我调用 CKEditor 一样,如下所示:
var editorId = 'editor1';
var instance = CKEDITOR.instances[editorId];
var color = $('.' + headerElementClass).css('background-color');
if (instance) { CKEDITOR.remove(instance); }
$('#' + editorId).ckeditor({ toolbar: 'BasicHtml', height: '100px', width: '500px', fullPage: false, bodyClass : 'background-color:' + color });
$('#' + editorId).val($('.' + headerElementClass).html());
注意 bodyClass 的失败使用。有什么办法可以做到这一点吗?我在网站上四处寻找答案,但没有找到。我希望这里有人能给出答案。
I have a situation on CKEditor that I would like to resolve. I use a jQuery color picker to add background color to a DIV tag. Then I allow the user to edit the Div tag contents using CKEditor. However, I noticed that there isn't a simple way to take the div tag's background color and then make that as the background color of the CKEditor when the editor loads up.
I have read up on bodyClass and bodyId and do not think that these solve my problem. I do not have a class element but an inline style declaration like
<div class="tp-header" style="background-color:#CCCCCC;">content</div>
I invoke the CKEditor as follows:
var editorId = 'editor1';
var instance = CKEDITOR.instances[editorId];
var color = $('.' + headerElementClass).css('background-color');
if (instance) { CKEDITOR.remove(instance); }
$('#' + editorId).ckeditor({ toolbar: 'BasicHtml', height: '100px', width: '500px', fullPage: false, bodyClass : 'background-color:' + color });
$('#' + editorId).val($('.' + headerElementClass).html());
Notice the failed usage of bodyClass. Is there any way to do this? I have scourged around the site for answers but couldn't find one. I hope someone here has the answer.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我正在思考这个问题,并想出了一个更简单的解决方案。
我没有使用 CKEditor jQuery 适配器,因此您可能需要修改它以适合您的情况。
我确实使用标准 JavaScript 集成方法对其进行了测试。
快速概述:
设置变量。
创建编辑器实例。
插入此“addCss”函数调用:
这就是它的全部内容。以下是基于您的代码的示例:
如果您愿意,可以将 addCss 函数调用移至您的配置文件(将其放置在 editorConfig 函数之外)。
祝你好运,
乔
离开更复杂的方法,有人可能会发现这些概念很有用。
您可以使用( bodyClass: 'nameOfClass' ),然后为该类的背景颜色属性分配一个值。但这很困难,因为你有动态背景颜色。
要动态分配背景颜色,您可以执行以下操作:
从您的代码开始并继续使用 jQuery:
Be Well,
乔
I was thinking about this and I came up with a much simpler solution.
I'm not using the CKEditor jQuery adapter, so you may need to modify it to fit your situation.
I did test it using the standard JavaScript integration approach.
Quick Overview:
Set the variables.
Create the editor instance.
Insert this "addCss" function call:
That's all there is to it. Here's a sample based on your code:
The addCss function call can be moved to your config file if you prefer (place it outside the editorConfig function).
Be Well,
Joe
Leaving the more complicated approach, someone might find the concepts useful.
You could use ( bodyClass: 'nameOfClass' ), then assign a value to the background-color property of that class. But that's difficult because you have a dynamic background color.
To assign the background color dynamically you could do something like this:
Starting with your code and continuing the use of jQuery:
Be Well,
Joe
codewaggle 的答案是一个很好的答案,但是如果您想在编辑器的
元素上设置内联样式,您也可以这样做,使用:
或
但是,您需要每次重做一次调用 editor.setData() 后以及用户切换回所见即所得模式(从源模式)后的时间,因为这些事情重新创建了编辑器 iframe。为此,请使用一个函数设置样式,例如
setEditorStyle
,首先检查editor.mode==='wysiwyg'
(否则editor.document
为 null),然后将该函数添加为instanceReady
和mode
事件的事件侦听器;如果您曾经调用过 setData() 并且不想随后手动调用它,也许还有contentDom
事件。请参阅此处和这里
codewaggle's answer is a good one, but if you want to set inline styles on the editor's
<body>
element, you can do that too, using:or
However, you'll need to redo this every time after calling editor.setData() and after the user switches back to wysiwyg mode (from source mode), because these things re-create the editor iframe. To do all that, set your styles using a function, say
setEditorStyle
, in which you check first thateditor.mode==='wysiwyg'
(editor.document
is null otherwise), then add that function as an event listener for theinstanceReady
andmode
events; and perhaps also thecontentDom
event if you ever call setData() and don't want to call it manually afterwards.See some other StackOverflow answers here and here