Javascript 为img和输入元素添加自定义id属性

Javascript 为img和输入元素添加自定义id属性,javascript,ckeditor,Javascript,Ckeditor,我试图为ckeditor 3.6.4中的每个img和input元素添加一个自定义id属性。 到目前为止,我已经添加了dataProcessor.htmlFilter来处理id属性,如下所示 CKEDITOR.on( 'instanceReady', function(event) { var editor = CKEDITOR.instances.editor; editor.dataProcessor.htmlFilt

我试图为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;
                            }
                        }

                    }
                }
            });
        });
当我在VisualEditor中添加一个新的文本字段时,我会得到一个新的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规则之后,它会以某种方式触发。

您可以尝试在规则中添加对编辑器模式的检查

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参考:


按照B计划进行


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

试过了,但奇怪的事情发生了。我一直将“所见即所得”设置为编辑器模式。我将在我的问题中添加更多数据