gpt4 book ai didi

javascript - 使用 CKEditor 的动态主体颜色

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:22:20 26 4
gpt4 key购买 nike

我想解决 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 的失败使用。有什么办法吗?我在网站上四处寻找答案,但找不到。我希望这里有人有答案。

最佳答案

我在考虑这个问题,想出了一个更简单的解决方案。
我没有使用 CKEditor jQuery 适配器,因此您可能需要修改它以适应您的情况。

我确实使用标准的 JavaScript 集成方法对其进行了测试。

快速概览:
设置变量。
创建编辑器实例。

插入这个“addCss”函数调用:

CKEDITOR.instances[editorId].addCss( 'body { background-color: '+color+'; }' );

这就是它的全部。这是基于您的代码的示例:

// I added the "id" attribute:
<div id="editor1" class="tp-header" style="background-color:#CCCCCC;">content</div>

// Declare the variables, I added "headerElementClass".
var headerElementClass = "tp-header";
var color = $('.' + headerElementClass).css('background-color');
var editorId = 'editor1';

// Create the instance.
var instanceOne = CKEDITOR.replace( editorId,
{
toolbar: 'Basic',
height: '100px',
width: '500px',
fullPage: false,
customConfig : 'yourCustomConfigFileIfUsed.js'
});

// Insert the "addCss" function call:
instanceOne.addCss( 'body { background-color: '+color+'; }' );


如果您愿意,可以将 addCss 函数调用移至您的配置文件(将其放在 editorConfig 函数之外)。

body 健康,乔


离开更复杂的方法,有人可能会发现这些概念很有用。

您可以使用 ( bodyClass: 'nameOfClass' ),然后为该类的 background-color 属性赋值。但这很难,因为您有动态背景色。

要动态分配背景颜色,您可以这样做:从您的代码开始并继续使用 jQuery:

var editorId = 'editor1';
var instance = CKEDITOR.instances[editorId];
var color = $('.' + headerElementClass).css('background-color');

// Create a unique body id for this instance "editor1" ( bodyIdForeditor1 )
var idForBody = 'bodyIdFor' + editorId;

if (instance) { CKEDITOR.remove(instance); }

// Use bodyId instead of the original bodyClass assignment
$('#' + editorId).ckeditor({
toolbar: 'BasicHtml',
height: '100px',
width: '500px',
fullPage: false,
bodyId : idForBody
});

$('#' + editorId).val($('.' + headerElementClass).html());

// After both the document and editor instance are ready,
// assign the background color to the body

// Wait for the document ready event
$(document).ready(function(){

// Wait for the instanceReady event to fire for this (editor1) instance
CKEDITOR.instances.editor1.on( 'instanceReady',
function( instanceReadyEventObj )
{
var currentEditorInstance = instanceReadyEventObj.editor;
var iframeDoc=null;

// Create a function because these steps will be repeated
function setIframeBackground()
{
// The CKEditor content iframe doesn't have a Name, Id or Class
// So, we'll assign an ID to the iframe
// it's inside a table data cell that does have an Id.
// The Id of the data cell is "cke_contents_editor1"
// Note that the instance name is the last part of the Id
// I'll follow this convention and use an Id of "cke_contents_iframe_editor1"

$("#cke_contents_editor1 iframe").attr("id", "cke_contents_iframe_editor1");

// Now use the iframe Id to get the iframe document object
// We'll need this to set the context and access items inside the iframe

$('#cke_iframe_editor1').each(
function(){ iframeDoc=this.contentWindow.document;}
);

// Finally we can access the iframe body and set the background color.
// We set the Id of the body when we created the instance (bodyId : idForBody).
// We use the iframe document object (iframeDoc) to set the context.
// We use the "color" variable created earlier

$('#' + idForBody, iframeDoc).css("background-color", color);
}

// Call the function to set the color when the editor instance first loads
setIframeBackground();

// When the user switches to "source" view mode, the iframe is destroyed
// So we need to set the color again when they switch back to "wysiwyg" mode

// Watch for the "mode" event and check if we're in "wysiwyg" mode
currentEditorInstance.on( 'mode', function()
{
if(currentEditorInstance.mode == 'wysiwyg')
setIframeBackground();
});
}
);
});

body 健康,乔

关于javascript - 使用 CKEditor 的动态主体颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3827073/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com