TinyMCE——自定义工具栏按钮(基础按钮、下拉框按钮、弹框按钮等)
详细配置查看官方文档:https://www.tiny.cloud/docs/tinymce/6/custom-toolbarbuttons/

配置方式:
tinymce.init({
selector: '#editor',
toolbar: 'myCustomToolbarButton',
setup: (editor) => {
editor.ui.registry.addButton('myCustomToolbarButton', {
text: 'My Custom Button',
onAction: () => alert('Button clicked!')
});
}
})
几种按钮使用的方法:
editor.ui.registry.addButton(identifier, configuration) // 切换按钮 editor.ui.registry.addToggleButton(identifier, configuration) // 下拉框 editor.ui.registry.addSplitButton(identifier, configuration) // 菜单 editor.ui.registry.addMenuButton(identifier, configuration) // 组合按钮 editor.ui.registry.addGroupToolbarButton(identifier, configuration)
官网示例:
tinymce.init({
selector: 'textarea#toolbar-button',
toolbar: 'basicDateButton selectiveDateButton toggleDateButton splitDateButton menuDateButton',
setup: (editor) => {
/* Helper functions */
const toDateHtml = (date) => `<time datetime="${date.toString()}">${date.toDateString()}</time>`;
const toGmtHtml = (date) => `<time datetime="${date.toString()}">${date.toGMTString()}</time>`;
const toIsoHtml = (date) => `<time datetime="${date.toString()}">${date.toISOString()}</time>`;
/* Basic button that just inserts the date */
editor.ui.registry.addButton('basicDateButton', {
text: 'Insert Date',
tooltip: 'Insert Current Date',
onAction: (_) => editor.insertContent(toDateHtml(new Date()))
});
/* Basic button that inserts the date, but only if the cursor isn't currently in a "time" element */
editor.ui.registry.addButton('selectiveDateButton', {
icon: 'insert-time',
tooltip: 'Insert Current Date',
enabled: false,
onAction: (_) => editor.insertContent(toDateHtml(new Date())),
onSetup: (buttonApi) => {
const editorEventCallback = (eventApi) => {
buttonApi.setEnabled(eventApi.element.nodeName.toLowerCase() !== 'time');
};
editor.on('NodeChange', editorEventCallback);
return () => editor.off('NodeChange', editorEventCallback);
}
});
/* Toggle button that inserts the date, but becomes inactive when the cursor is in a "time" element */
/* so you can't insert a "time" element inside another one. Also gives visual feedback. */
editor.ui.registry.addToggleButton('toggleDateButton', {
icon: 'insert-time',
tooltip: 'Insert Current Date',
onAction: (_) => editor.insertContent(toDateHtml(new Date())),
onSetup: (buttonApi) => {
const editorEventCallback = (eventApi) => {
buttonApi.setActive(eventApi.element.nodeName.toLowerCase() === 'time');
};
editor.on('NodeChange', editorEventCallback);
return () => editor.off('NodeChange', editorEventCallback);
}
});
/* Split button that lists 3 formats, and inserts the date in the selected format when clicked */
editor.ui.registry.addSplitButton('splitDateButton', {
text: 'Insert Date',
onAction: (_) => editor.insertContent('<p>Its Friday!</p>'),
onItemAction: (buttonApi, value) => editor.insertContent(value),
fetch: (callback) => {
const items = [
{
type: 'choiceitem',
text: 'Insert Date',
value: toDateHtml(new Date())
},
{
type: 'choiceitem',
text: 'Insert GMT Date',
value: toGmtHtml(new Date())
},
{
type: 'choiceitem',
text: 'Insert ISO Date',
value: toIsoHtml(new Date())
}
];
callback(items);
}
});
/* Menu button that has a simple "insert date" menu item, and a submenu containing other formats. */
/* Clicking the first menu item or one of the submenu items inserts the date in the selected format. */
editor.ui.registry.addMenuButton('menuDateButton', {
text: 'Date',
fetch: (callback) => {
const items = [
{
type: 'menuitem',
text: 'Insert Date',
onAction: (_) => editor.insertContent(toDateHtml(new Date()))
},
{
type: 'nestedmenuitem',
text: 'Other formats',
getSubmenuItems: () => [
{
type: 'menuitem',
text: 'GMT',
onAction: (_) => editor.insertContent(toGmtHtml(new Date()))
},
{
type: 'menuitem',
text: 'ISO',
onAction: (_) => editor.insertContent(toIsoHtml(new Date()))
}
]
}
];
callback(items);
}
});
},
content_style: 'body { font-family:Helvetica,Arial,sans-serif; font-size:16px }'
});
出来的效果如下,在官网可以自己进行测试,非常方便


浙公网安备 33010602011771号