0

CKEditor を使い始めたばかりで、目的を達成するのに十分なほど API を理解できていません。

基本的に、ページ上にエディターのインスタンスがいくつかあります。ただし、htmlInput という名前のエディターについては、エディターに追加されるフォーム要素の名前を収集したいと考えています。私が得た最も近い方法は、適切なダイアログが開かれたときにアラートをポップアップさせることですが、これらのボックスの名前フィールドの値を抽出できませんでした.

これが私がこれまでに持っているものです。

CKEDITOR.on('dialogDefinition', function (e) {
    var dialogName = e.data.name;
    var dialog = e.data.definition.dialog;

    if(e.editor.name == 'htmlInput' && (dialogName=='checkbox' || dialogName=='radio' || dialogName=='textfield' || dialogName == 'textarea' || dialogName == 'select'))
    {
        dialog.on('show', function (ev) {
            alert('here');
        });
    }
});
4

1 に答える 1

0

あなたがやろうとしていることは非常に危険です。誰かがそのようなフォーム要素を貼り付けたり、editor.insertHtml()メソッドを使用したりした場合を想像してみてください。それらは収集されません。より良いアプローチは次のとおりです。

var form = {};

CKEDITOR.instances.editor1.dataProcessor.htmlFilter.addRules({
    elements: {
        $: function( element ) {
            if ( element.name in { 'input' : 1, 'textarea': 1, 'button' : 1 } ) {
                if ( !form[ element.name ] )
                    form[ element.name ] = [];

                form[ element.name ].push( element );
            }
        }
    }
});

これで、基本的に次のことができるようになります。

CKEDITOR.instances.editor1.getData();
console.log( form );

次に、ドキュメントに属するすべてのフォーム要素(または任意の種類の要素)を取得します。formフォームをシリアル化するときは、オブジェクトが空であることを確認してください。つまりhtmlFilter、ソースモード<-> wysiwygを切り替えるときにも実行され、リストに継続的に入力されます。


基本的に、以下を使用してタグ名で要素を取得することもできます(簡単な方法IMO)。

CKEDITOR.instances.editor1.document.getElementsByTag( 'input' );
于 2013-01-07T11:39:43.070 に答える