在ckeditor中选择figure元素 - 捕获点击figure元素(或任何子元素)

时间:2011-06-29 04:15:51

标签: ckeditor

我正在寻找一种捕捉和选择数字元素(或其任何子元素)的方法

理想情况下,我希望在图标标记内绕过imgs的选择(包括imgs上的objectResizing)。

我玩过使用currentInstance事件捕获事件。不确定这是最好的方法还是有其他事件。显然,我需要某种事件冒泡来知道事件目标(即img)是否在一个数字元素内。

我对如何在javascript / jquery中做到这一点有所了解,但我正在寻找合适的ckeditor方法,因为这是在ckeditor中用imgs和tables完成的。

我找到了一个可能的解决方案,这使我能够选择数字元素,无论我点击其中一个孩子还是数字本身。但是,双击会触发与孩子相关的其他事件,所以我需要找到一种方法来取消这种情况下的其他事件

    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);
            }

        }
    });

1 个答案:

答案 0 :(得分:2)

事实证明,我只需假装打开一个对话框。我对doubleclick的问题是我没有使用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 = '';
            }

        }
    });