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对象在序列化表单时为空,因为 iehtmlFilter在源模式 <-> 所见即所得之间切换时也会执行,并且它将不断填充您的列表。


您还可以基本上使用以下内容按标签名称检索元素(简单方式 IMO):

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