在古腾堡中使用工具栏按钮时,如何获取选定的字符串?

时间:2019-10-31 作者:davemackey

我在块编辑器中添加了一个按钮。目前,它添加了<span class="lqdnotes-blank-it"> 在选定文本之前,以及</span> 在这样之后:

<span class="lqdnotes-blank-it">Selected Text.</span>

以下是当前代码:

(function ( wp ) {
    var lqdNotesButton = function( props ) {
        return wp.element.createElement(
            wp.blockEditor.RichTextToolbarButton, {
                icon: \'editor-code\',
                title: \'Blank It\',
                onClick: function () {
                    props.onChange( wp.richText.toggleFormat(
                        props.value,
                        { type: \'lqdnotes/blankit\' }
                    ));
                },
            }
        );
    };

    wp.richText.registerFormatType(
        \'lqdnotes/blankit\', {
            title: \'Blank It\',
            tagName: \'span\',
            className: \'lqdnotes-blank-it\',
            edit: lqdNotesButton,
        }
    );
} )( window.wp );
我想改变它的功能。我希望它用一个输入文本框替换所选文本,而不是在其周围添加一个类。预期结果如下所示:

<input type="text" class="lqdnotes-blanked" id="FirstFifteenCharsOfSelectedTextUniqueID">

因此,可能会有如下帖子内容:

“美国内战始于1861年,于1865年结束。”

如果个人在1861年和1865年切换按钮,输出可能如下所示:

“美国内战始于<input type="text" class="lqdnotes-blanked" id="1861lqd0001"> 并于<input type="text" class="lqdnotes-blanked" id="1865lqd0002">.“”

到目前为止,我还无法弄清楚的是如何获取所选文本的值,以及如何将其作为输入id的一部分返回。

1 个回复
SO网友:bueltge

您可以使用getTextContent(). 因此,您应该在该内容之前和之后添加HTML。

这是一个小的代码示例,它不起作用,因为我添加了没有值的变量,只是为了理解。要了解我如何定义变量,以及如何添加更多过滤器来验证内容,请参阅我的播放代码a GitHub repo.

    registerFormatType(type, {
        title,
        tagName,
        tagEnd,
        className,
        edit({isActive, value, onChange}) {
            // Get the selected string.
            const text = getTextContent(slice(value));
            const toInsert = tagName + text + tagEnd;
            //const onClick = () => onChange( insert( value, toInsert ) );
            const onClick = () => {
                element = create({
                    \'html\' : toInsert
                });
                if( element.formats.length === 0 ) {
                    return;
                }
                for ( let i = element.formats[0].length - 1; i >= 0; i-- ) {
                    value = toggleFormat(value, element.formats[0][i]);
                }
                onChange(value);
            };

            return (
                createElement(Fragment, null,
                    createElement(RichTextShortcut, {
                        type : \'primary\',
                        character,
                        onUse: onClick
                    }),
                    createElement(RichTextToolbarButton, {
                        icon,
                        title,
                        onClick          : onClick,
                        isActive         : isActive,
                        shortcutType     : \'primary\',
                        shortcutCharacter: character,
                        className        : `toolbar-button-with-text toolbar-button__advanced-${name}`
                    })
                )
            )
        }
    });
您还应该从本主题的核心部分看到这段代码。https://github.com/WordPress/gutenberg/blob/4741104c2e035a6b80ab7e01031a9d4086b3f75d/packages/rich-text/src/register-format-type.js#L17

相关推荐