我正在寻找一种捕捉和选择数字元素(或其任何子元素)的方法
理想情况下,我希望在图标标记内绕过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);
}
}
});
答案 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 = '';
}
}
});