Javascript 如何使每个元素分离

Javascript 如何使每个元素分离,javascript,ckeditor,ckeditor5,Javascript,Ckeditor,Ckeditor5,如何将每个元素分开。目前,每个元素合并为一个元素 <span style="font-family:wingdings;">.4=??????</span> <span style="font-family:symbol;">QPGH</span> 我希望输出像这样 <span style="font-family:wingdings;">=</span> <span style="font-family:wingd

如何将每个元素分开。目前,每个元素合并为一个
元素

<span style="font-family:wingdings;">.4=??????</span>
<span style="font-family:symbol;">QPGH</span>
我希望输出像这样

<span style="font-family:wingdings;">=</span>
<span style="font-family:wingdings;">?</span>
<span style="font-family:wingdings;">4</span>
<span style="font-family:symbol;">4</span>
<span style="font-family:symbol;">4</span>
...
=
?
4.
4.
4.
...
加入类似的
s是默认的CKEditor 5行为。其中一个原因是,这些字符也加入到数据模型中,并由一个文本节点表示。无论是逐个插入还是一次性全部插入这些字符,只要它们具有相同的属性,就可以将它们分组在一起

防止这种情况发生的方法之一是指定。不幸的是,这是一门更高级的学科。除此之外,还必须提供转换器,以便在视图中创建属性元素

我认为有两种方法可以实现您的目标,这两种方法都需要您添加一个转换器,而不是依赖于字体系列插件中的
fontFamily
converter(我假设这种情况发生在这里)

在具有唯一AttributeElement#id的文本上使用属性以防止加入
s 第一个解决方案是为文本引入一个新属性(记住扩展),并为其提供转换器。让我们调用属性键
symbol

转换器必须逐个字符地转换给定的文本节点,并且对于每个创建的属性范围都是唯一的

这是一个更复杂的解决方案,尽管可能更好

editor.model.conversion.for( 'downcast' ).add( dispatcher => {
    dispatcher.on( 'attribute:symbol', ( evt, data, conversionApi ) => {
        // Provide your converter here. It should take `data.item`, iterate
        // through it's text content (`data.item.data`), use
        // `conversionApi.writer` to create attribute elements with unique ids
        // and use the writer and `conversionApi.mapper` to place them in the view.
    } );
} );
您可以基于引擎中的
downcasthelpers.js
中的
函数包装

将符号作为内联元素插入 另一种解决方案是插入带有字符的元素,而不是简单的文本节点

在这种情况下,同样需要在模式中指定新的模型元素。可能会扩展
“$text”

对于转换,您可能可以使用来自的
elementToElement
helpers。对于downcast,您必须将
视图
指定为回调,并在那里设置唯一id(唯一id可以是一个计数器,每次递增一个)。如果
elementToElement
不适用于向下播放(应该适用于向上播放),则需要通过
为('downcast')提供自定义转换器。添加(…)

这个解决方案比较简单,但我不确定它是否有效。很难说哪一个更好,因为这也取决于你到底想要实现什么。我可能会尝试两种方法,但我会集中精力尝试使用第一种方法

我希望现在有一个更简单的方法来实现这一点,但是这个用例非常罕见,所以架构的重点是另一个方向。

加入类似的
s是默认的CKEditor 5行为。其中一个原因是,这些字符也加入到数据模型中,并由一个文本节点表示。无论是逐个插入还是一次性全部插入这些字符,只要它们具有相同的属性,就可以将它们分组在一起

防止这种情况发生的方法之一是指定。不幸的是,这是一门更高级的学科。除此之外,还必须提供转换器,以便在视图中创建属性元素

我认为有两种方法可以实现您的目标,这两种方法都需要您添加一个转换器,而不是依赖于字体系列插件中的
fontFamily
converter(我假设这种情况发生在这里)

在具有唯一AttributeElement#id的文本上使用属性以防止加入
s 第一个解决方案是为文本引入一个新属性(记住扩展),并为其提供转换器。让我们调用属性键
symbol

转换器必须逐个字符地转换给定的文本节点,并且对于每个创建的属性范围都是唯一的

这是一个更复杂的解决方案,尽管可能更好

editor.model.conversion.for( 'downcast' ).add( dispatcher => {
    dispatcher.on( 'attribute:symbol', ( evt, data, conversionApi ) => {
        // Provide your converter here. It should take `data.item`, iterate
        // through it's text content (`data.item.data`), use
        // `conversionApi.writer` to create attribute elements with unique ids
        // and use the writer and `conversionApi.mapper` to place them in the view.
    } );
} );
您可以基于引擎中的
downcasthelpers.js
中的
函数包装

将符号作为内联元素插入 另一种解决方案是插入带有字符的元素,而不是简单的文本节点

在这种情况下,同样需要在模式中指定新的模型元素。可能会扩展
“$text”

对于转换,您可能可以使用来自的
elementToElement
helpers。对于downcast,您必须将
视图
指定为回调,并在那里设置唯一id(唯一id可以是一个计数器,每次递增一个)。如果
elementToElement
不适用于向下播放(应该适用于向上播放),则需要通过
为('downcast')提供自定义转换器。添加(…)

这个解决方案比较简单,但我不确定它是否有效。很难说哪一个更好,因为这也取决于你到底想要实现什么。我可能会尝试两种方法,但我会集中精力尝试使用第一种方法


我希望现在有一个更简单的方法来实现这一点,但是这个用例非常罕见,因此,体系结构的重点是另一个方向。

您想用它实现什么?字符取决于字体系列,例如,带有字体系列符号的字符F应该返回不同于带有字体系列Wingdings的字符F的unicode。您想用它实现什么?字符取决于字体系列,例如带有字体系列符号的字符F字体系列符号应该返回与带有字体系列wingdings的字符F不同的unicode