2012-10-10 68 views
2

我想爲ckeditor 3.6.4中的每個img &輸入元素添加一個自定義id屬性。 到目前爲止,我已經添加dataProcessor.htmlFilter處理id屬性像這樣爲img和輸入元素添加自定義id屬性

 CKEDITOR.on('instanceReady', function(event) {  
      var editor = CKEDITOR.instances.editor; 

      editor.dataProcessor.htmlFilter.addRules(
      { 
       elements: { 
        $: function (element) { 
         if ((element.name == 'img' || element.name == 'input') && CKEDITOR.instances.editor.mode == 'wysiwyg') { 
          if (!element.attributes.id){ 
           var g = createID(); 
           alert('new id: ' + g); 
           element.attributes.id = g; 
          } 
         } 

        } 
       } 
      }); 
     }); 

,當我在可視化編輯器添加一個新的文本字段我得到一個新的ID。但是如果我設置爲源模式,模式仍然是'wysiwyg'而不是'源',它會給出一個新的ID。

如何防止雙重行爲?


做了一些測試。加入了這個

CKEDITOR.instances.editor.on('mode', function() { 
      // Code to execute when the user switches editing modes 
       alert('Changed to: ' + CKEDITOR.instances.editor.mode); 
      }); 

不知何故,在htmlFilter規則後觸發。

回答

1

去與定製的B計劃

所需的部件,並加入插件的id屬性。簡單而快速。

2

您可以嘗試將編輯器模式的檢查添加到您的規則中。

if ((element.name == 'img' || element.name == 'input') && editor.mode == "wysiwyg") { 
    if (!element.attributes.id){ 
     var g = createID(); 
     alert('new id: ' + g); 
     element.attributes.id = g; 
    } 
} 

我不知道「編輯」是否會使用正確的對象名稱,您可能需要使用CKEDITOR.currentInstance.mode
還有一個getMode()方法。


這裏有記載事項的一些API參考:
mode property
currentInstance property
getMode() method

+0

試過了,但有些奇怪的事情正在發生。我不斷收到'wysiwyg'的編輯模式。我會在我的問題中添加更多的數據 – Vili