为img和input元素添加自定义id属性

时间:2012-10-10 10:21:13

标签: javascript ckeditor

我正在尝试为每个img&添加自定义ID属性ckeditor 3.6.4中的输入元素。 到目前为止,我添加了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。但是如果我设置为源模式,模式仍然是'wysiwyg'而不是'source',它会给出一个新的Id。

如何防止双重操作?


做了一些测试。添加了这个

CKEDITOR.instances.editor.on('mode', function() {
            // Code to execute when the user switches editing modes
                alert('Changed to: ' + CKEDITOR.instances.editor.mode);
            });

以某种方式在htmlFilter规则之后触发。

2 个答案:

答案 0 :(得分: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参考:
mode property
currentInstance property
getMode() method

答案 1 :(得分:1)

参加计划B

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