javascript - 如何在 CKEditor5 中创建一个 Matcher 实例?

标签 javascript ckeditor ckeditor5

我试图根据他的 ID 在模型中找到一个元素。 查看文档,似乎 Matcher类可以做我需要的。

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

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

最佳答案

如果你想对模型进行操作,那么你应该使用与engine/model相关的类。你说的Matcher属于engine/view,不适合模型运行。

如果你想遍历模型并对其进行操作,那么你可以使用 TreeWalker类(class)。您只需在整个模型上创建范围,或在开头创建起始位置。

另一种选择是获取 root element并遍历它的 children递归地。

例如,您可以这样使用 tree walker:

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

关于javascript - 如何在 CKEditor5 中创建一个 Matcher 实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56763824/

相关文章:

javascript - 从 javascript 异步查询 Neo4j

javascript - 离开编辑后的 ​​html 表单前提示确认

javascript - jQuery 验证 : how to make the amount of characters no include the tokens generated by CKEditor?

c# - 如何在 ASP.Net Core - CKEDITOR 5 上使用自定义上传适配器?

javascript - 如何使用定义为 RegExp 或函数的 View 来定义 CKEditor5 双向转换器?

javascript - 什么在移动设备上表现更好? Head.js 还是一个大的 js 文件?

javascript - cannon.js 在不发生碰撞的情况下注册碰撞

javascript - 使用 ckeditor 仅更改一个文本区域的高度

php - 删除图像的包装标签

javascript - CKEditor5,如何在我的 javascript 函数中编写 Blur 事件处理程序