代码之家  ›  专栏  ›  技术社区  ›  Marjan

在运行中更改内容css tinymce或ckeditor

  •  1
  • Marjan  · 技术社区  · 16 年前

    我有一个表单要在其中编辑HTML模板。它有两个文本区域,一个用于HTML,另一个用于CSS。

    我想使用tinymce或ckeditor作为HTML文本区域。

    是否有任何方法可以更改其中任何一个CSS中的内容,以便在运行时与CSS文本区域中的CSS匹配,所以当我更改CSS时,它会自动加载到编辑器中?

    谢谢。

    1 回复  |  直到 16 年前
        1
  •  0
  •   Thariama    16 年前

    我没有使用键盘编辑器的经验,但我知道使用Tinymce是可能的。您需要做的是编写一个自己的插件,它将提供必要的功能。

    在第二个文本区域(使用CSS的文本区域)中,需要更新第一个编辑器的头iframe。要在特殊操作(例如onNodeChange)上执行的代码段应将您指向正确的方向:

    var DEBUG = false;
    var css_code = tinymce.editors[1].getContent(); // get content of 2nd editorinstance on page (your css)
    
    
    iframe_id = tinymce.editors[0].id+'_ifr';
    
    with(document.getElementById(iframe_id).contentWindow){
        var h=document.getElementsByTagName("head");
        if (!h.length) {
            if (DEBUG) console.log('length of h is null');
            return;
        }
        var newStyleSheet=document.createElement("style");
        newStyleSheet.type="text/css";
        h[0].appendChild(newStyleSheet);
        try{
            if (typeof newStyleSheet.styleSheet !== "undefined") {
            newStyleSheet.styleSheet.cssText = css_code;
        }
        else {
            newStyleSheet.appendChild(document.createTextNode(css_code));
            newStyleSheet.innerHTML=css_code;
        }
    }
    

    请注意,每次调用这个代码时,它都会添加一个新的样式表——增加编辑器的iframes头。所以我认为最佳实践是在应用新样式之前清理最后插入的样式。移除头部的最后一个节点就足够了。