获取CKEditor 5中type的所有元素

Get all elements of type in CKEditor 5

我的编辑器包含自定义元素,创建方式如下:

this.editor.model.change( writer => {
    const id = `a${ Math.random().toString().replace('.', '') }`;

    const autocomplete = writer.createElement( 'autocomplete', { 'data-id': id );

    this.editor.model.insertContent( autocomplete );
} );

我想稍后在我的插件中获取所有 'autocomplete' 元素,以便我可以阅读它们的内容(它们是可编辑的元素)。

编辑器的模型有没有类似querySelectorAll('autocomplete')的东西?

可以使用 range.getWalker

const findNodes = function(writer, type, root) {
    const nodes = [];
    const range = writer.createRangeIn( root );

    for ( const value of range.getWalker({ ignoreElementEnd: true }) ) {
        const node = value.item;

        if ( node.is( type ) ) {
            nodes.push(node);
        }
    }

    return nodes;
};

this.editor.model.change( writer => {
    const autocompletes = findNodes(writer, 'autocomplete', this.editor.model.document.getRoot());
} );