如何在CKEditor5中创建Matcher实例?

时间:2019-06-26 01:02:38

标签: javascript ckeditor ckeditor5

我正在尝试根据他的ID在模型中找到一个元素。 浏览文档,看来Matcher类可以满足我的需要。

但是,我无法创建Matcher实例,那里的所有示例仅显示了如何使用Matcher,而不是如何创建实例。

抱歉,这是一个愚蠢的问题,但是如何创建新的Matcher实例?

1 个答案:

答案 0 :(得分:0)

如果要对模型进行操作,则应使用与engine/model相关的类。您提到的Matcher属于engine/view,因此不适合模型操作。

如果您想遍历模型并对其进行操作,则可以使用TreeWalker类。您只需要在整个模型上创建范围,或在开始处创建开始位置即可。

另一个选择可能是获取root element并递归遍历其children

例如,您可以通过以下方式利用树助行器:

const txt = ( editor => {
    const position = new Position( editor.model.document.getRoot(), [ 0 ] );
    const walker = new TreeWalker( { startPosition: position } );

    for ( const element of walker ) {
        // do sth with 'element'
        // but be careful on element boundaries
    }

    return outputText;
} )( this.editor );

您可以在此处递归地遍历孩子,其中rootElement可以用作输入元素。

function getAllTextFromElementAndChildren( element ) {
    if( element.is( 'text' ) ){
        return elemen.data;
    }

    let text = '';

    for ( const child of element.getChildren() ) {
        const childText = getAllTextFromElementAndChildren( child );

        text += childText;
    }

    return text;
}