2

ckeditor 3.6.4 の各 img & input 要素にカスタム id 属性を追加しようとしています。これまでのところ、このような id 属性を処理するために dataProcessor.htmlFilter を追加しました

        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 ルールの後に発生します。

4

2 に答える 2

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;
    }
}

「editor」が使用する正しいオブジェクト名になるかどうかはわかりませんが、使用 CKEDITOR.currentInstance.mode
する方法もありgetMode()ます。


言及された項目のいくつかの API リファレンスを次に示します。
modeプロパティ
currentInstanceプロパティ
getMode()メソッド

于 2012-10-11T01:11:39.220 に答える
1

プランBで行きました

必要なウィジェットをカスタマイズし、プラグインに id 属性を追加しました。簡単で速かった。

于 2012-10-12T12:48:07.600 に答える