在ckeditor中选择地物元素-捕获单击地物元素(或任何子项)

在ckeditor中选择地物元素-捕获单击地物元素(或任何子项),ckeditor,Ckeditor,我正在寻找一种方法来捕获和选择图形元素(或其任何子元素) 理想情况下,我希望这样可以绕过IMG的选择(包括IMG上的objectResizing),当它们位于地物标记中时 我已经尝试过使用currentInstance事件捕获事件。不确定这是不是最好的方法,或者是否有其他事件。显然,我需要某种类型的事件冒泡来知道事件目标(即img)是否在figure元素中 我知道如何在javascript/jquery中实现这一点,但我正在寻找合适的ckeditor方法,因为这是在ckeditor中使用img和

我正在寻找一种方法来捕获和选择图形元素(或其任何子元素)

理想情况下,我希望这样可以绕过IMG的选择(包括IMG上的objectResizing),当它们位于地物标记中时

我已经尝试过使用currentInstance事件捕获事件。不确定这是不是最好的方法,或者是否有其他事件。显然,我需要某种类型的事件冒泡来知道事件目标(即img)是否在figure元素中

我知道如何在javascript/jquery中实现这一点,但我正在寻找合适的ckeditor方法,因为这是在ckeditor中使用img和表实现的

我找到了一个可能的解决方案,它使我能够选择figure元素,无论是单击它的子元素还是图形本身。但是,双击会触发与子级关联的其他事件,因此在本例中,我需要找到一种方法来取消这些其他事件

    editor.on( 'selectionChange', function( evt )
    {
        if ( editor.readOnly )
                return;

        /*
         * only select our figure elements
         */
        var element = evt.data.path.lastElement && evt.data.path.lastElement.getAscendant( 'figure', true );
        if ( element && element.getName() == 'figure' && element.getAttribute( 'data-media-id' ) && element.getChildCount() ) {
            editor.getSelection().selectElement(element);
        }
    });


    editor.on( 'doubleclick', function( evt )
    {
        var element = evt.data.element.getAscendant( 'figure', true );

        if ( !element.isReadOnly() )
        {
            if ( element.is( 'figure' ) || element.getParent().is( 'figure' ) )
            {   
                editor.getSelection().selectElement( element );

                editor.execCommand('imagemanager', element);
            }

        }
    });

事实证明,我只需要假装打开一个对话框。双击的问题是我没有使用ckeditor的对话框(因为我正在打开一个ajax窗口并自己构建它)。因此,这会阻止其他窗口打开

    editor.on( 'doubleclick', function( evt )
    {
        var element = evt.data.element.getAscendant( 'figure', true );

        if ( !element.isReadOnly() )
        {
            if ( element.is( 'figure' ) || element.getParent().is( 'figure' ) )
            {   
                editor.getSelection().selectElement( element );

                editor.execCommand('imagemanager', element);

                // :HACK: pretend to open a dialog, cancels other dialogs from opening
                evt.data.dialog = '';
            }

        }
    });