2

我正在尝试为 ckeditor 3.6.4 中的每个 img & input 元素添加自定义 id 属性。到目前为止,我已经添加了 dataProcessor.htmlFilter 来处理这样的 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。但是如果我设置为源模式,模式仍然是“所见即所得”而不是“源”,它会给出一个新的 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;
    }
}

我不确定“编辑器”是否是要使用的正确对象名称,您可能想要使用 CKEDITOR.currentInstance.mode
还有一种getMode()方法。


以下是提到的项目的一些 api 参考:
modeproperty
currentInstance属性
getMode()方法

于 2012-10-11T01:11:39.220 回答
1

与计划 B 一起去

自定义所需的小部件并在插件中添加 id 属性。简单快捷。

于 2012-10-12T12:48:07.600 回答