2016-04-26 84 views
0

使用CKEditor 4和自定义样式功能。我的工作很好,但有些事情真的让我感到困扰。看起来好像你想在下拉菜单中预览样式,你的CKEDITOR.stylesSet对象需要有styles属性。像:CKEditor自定义样式下拉预览,但没有内联

{ name: name, element: element, attributes: { class: css_class }, styles: styles_as_json }

我真正想要的仅仅是添加以attributes,当你选择一种样式已经突出显示的页面元素的类。但是,当您将风格应用于内容时,它会将中的类添加为内联,无论您在styles中列出了哪些内容,哪种类型都会使此整个功能毫无意义。

CKEditor提供加载自定义样式和将它们归入css类的能力的原因是您可以修改样式,然后任何与该css类相关的东西都会自动更新。但是,当它也应用内联样式时,更改自定义样式不起作用,因为现在自定义样式新样式被内联样式覆盖(歪歪扭扭,变得罗嗦)。

我在问是否有人想要在下拉列表中预览样式(自定义样式应用于列表元素)不希望这些样式在页面内容上内联 - 您只希望应用css类。你是怎么做到的?

我认为它与iframe中的下拉列表有关(因此父窗口中的css不会携带到该窗口中),因为样式的给定css类在样式选项上,但是样式不适用。这就是为什么如果样式在样式选项上内联,选项将采用样式。

回答

0

我最终找到了一个(哈克)解决方案,所以我想我会发布它,如果任何人都好奇。

我开始给我的风格标签给我的自定义样式定义。
<style id="_custom_styles">...</style>

然后当CKEditor的实例已经准备好我听了点击上的样式下拉,然后抓起风格元素,并将它复制到风格下拉列表,因此列表中的元素可以通过其指定类样式。

CKEDITOR.on 'instanceReady', -> 
    $(".cke").on "click", ".cke_combo__styles", (e) -> 
    node = document.getElementById("_custom_styles").cloneNode(true) 
    $(".cke_combopanel__styles").find("iframe")[0].contentWindow.document.head.appendChild(node)