2016-04-26 83 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)