2014-04-02 99 views
0

如果事情我在CKEDITOR編寫源看起來是這樣的標籤:CKEditor的忽略了上課

This is my text. <strong>This part is bold.</strong> This part isn't. 

我可以突出加粗部分,並通過按CTRL + B取消粗體它。但是,如果我將一個類添加到該強標記(由於我正在處理另一個插件),我只能展開乾淨的強標記 - 沒有屬性,樣式或類。例如,請考慮以下情況:

This is my text. <strong>This part is bold.</strong> This part isn't. <strong class="whatever">This part is bolded AND has a custom class.</strong> 

只有第一個加粗分割將是不用粗體 - 第二個是相當多粘因爲是直到我刪除「.whatever」級。有沒有辦法讓它忽略帶有類的強標籤,並且只要做到這一點,而不管它們具有什麼其他屬性?我猜它必須與「高級內容過濾器」有關,但我無法弄清楚。

回答

0

經過大量的發片,我(想)我有答案。在CKEDITOR樣式定義中,應用樣式(例如,強標籤)需要通過內容過濾器分析其所有屬性。如果某個屬性未被此過濾器處理,則需要從樣式標記中實際刪除textNode並將其替換回父元素。有一個(非常糟糕的)解決方法:alwaysRemoveElement屬性可以是set to true on the style DEFINITION(爲什麼定義,而不是風格本身,我不知道)。

長話短說,一小段代碼將強制刪除所有樣式標記,即使它們的屬性與過濾器不完全匹配。但願它不會導致錯誤別的地方...

//this = Your Editor Instance 
this.data.editor.on('instanceReady', function(){ 

    //Filter through the existing contentRules, looking for styleCommands 
    $.each(this.activeFilter.allowedContent, function(i,v) { 
     var name = v.featureName, command = this.commands[v.featureName]; 
     if (name && command && command.contentForms && command.style) { 
      command.style._.definition.alwaysRemoveElement = true; 
     } 
    }.bind(this)); 
}.bind(this)); 
0

由於以前的答案,只需添加這在配置:

CKEDITOR.config.coreStyles_bold : { element: 'strong', overrides: 'b' ,alwaysRemoveElement: true}, 

這也是我很難找到這種解決方法,在我的情況是我爲強壯的元素添加了一個id。