【问题标题】:In CkEditor 4.3 with Image2 plugin, what is the right way to change the image src?在带有 Image2 插件的 CkEditor 4.3 中,更改图像 src 的正确方法是什么?
【发布时间】:2013-12-21 16:18:13
【问题描述】:

正如标题所说,我正在使用基于完整包的CkEditor 4.3 版本,其中还包括Image2 plugin(使用CkBuilder 构建,以便自动解决每个依赖项)。

我需要以编程方式(如果需要,还可以使用 jQuery)更改图像的 src 属性。

使用经典的Image plugin,我使用以下代码完成此操作:

var imgToBeReplaced = editor.document.findOne("img#myImg");
imgToBeReplaced.setAttribute("src", newSrc);

因为我需要确保编辑器对象的 getData() 方法返回正确的数据,所以我还执行以下操作(了解更多信息:CKEditor - Change image source):

$(imgToBeReplaced.$).attr("data-cke-saved-src", newSrc);

当我使用Image2 plugin 执行此操作时,图像已正确更改,但在那之后,我无法调整它的大小,也无法访问图像属性(既不能双击图像,也不能使用上下文菜单右键单击图像打开,因为“属性”选项不再存在)。

那么,问题是:我怎样才能正确更改src(和data-cke-saved-src)属性,而不会失去更改图像属性的可能性?

【问题讨论】:

    标签: javascript jquery image ckeditor


    【解决方案1】:

    现在有了小部件,您唯一需要担心的是

    • 获取正确的小部件实例
    • 调用setData()方法

    对于这种特殊情况,您需要

    // You need to have CKEDITOR.editor instance, here i will pick it from instances property.
    var editor = CKEDITOR.instances.editor1,
        // All widgets instances are stored here, we will iterate on top of them.
        widgets = editor.widgets.instances,
        curWidget,
        i;
    
    for ( i in widgets ) {
        curWidget = widgets[ i ];
        // Ensure that image is a part of widget, and src matchs our needs.
        if ( curWidget.definition.name == 'image2' && curWidget.parts.image.getAttribute( 'src' ) == 'assets/image1.jpg' ) {
            // Update src attribute.
            curWidget.setData( 'src', 'http://upload.wikimedia.org/wikipedia/en/1/18/Unicorn-head-circle-2.png' );
        }
    }
    

    这将是更新 image2 src 的正确方法 - 所有内容都将由 image2 插件本身处理。

    【讨论】:

    • 您的方法很棒,但只能将curWidget.definition.name == 'image2' 更改为curWidget.definition.name == 'image' ;) 非常感谢(请在您的回答中进行此编辑)
    • 我很高兴该解决方案对您有用,但是您确定定义名称吗?我很确定它应该是image2。 :) 请仔细检查并告诉我。
    • VitoShadow 是对的 - 小部件的名称在 4.3.1 中已更改。我们这样做是为了更容易用 image2 替换旧的图像插件。
    • 附言。如果要修改焦点小部件,则可以使用 editor.widgets.focused 简单地编写此代码。
    • @Reinmar - 小问题:Image2 在全局范围内声明了一个widget 变量,然后在onShow 函数中将widget 设置为this.widget。我无法在我自己的对话框定义中重新创建它。我在我的对话框的onShow 方法中console.log'd this,它不包含widget。知道为什么吗?
    猜你喜欢
    • 2019-05-24
    • 2015-01-01
    • 1970-01-01
    • 2021-05-24
    • 2012-03-12
    • 1970-01-01
    • 1970-01-01
    • 2011-08-12
    • 2014-02-17
    相关资源
    最近更新 更多