Closed charescape closed 2 years ago
我试了一下使用 insertFn()
实现,但是 html 字符被转义了,无法实现点击打开新页面
同问,想要点击直接打开url
想要点击行为,在显示的时候为 span[data-w-e-type="attachment"]
绑定一个 click 事件即可
我这边这样修改了一下实现了;
// 生成 html 的函数
function attachmentToHtml(elem: SlateElement, childrenHtml: string): string {
const { link = '', fileName = '' } = elem as AttachmentElement
// return `<span data-w-e-type="attachment" data-w-e-is-void data-w-e-is-inline data-link="${link}" data-fileName="${fileName}">${fileName}</span>`
return `<a data-w-e-type="attachment" data-w-e-is-void data-w-e-is-inline data-link="${link}" data-fileName="${fileName}" href="${link}" target="_blank">${fileName}</a>`
}
// 配置
const conf = {
type: 'attachment', // 节点 type ,重要!!!
elemToHtml: attachmentToHtml,
}
attachmentModule.elemsToHtml = [conf]
// 注册。要在创建编辑器之前注册,且只能注册一次,不可重复注册。
Boot.registerModule(attachmentModule)
想要点击行为,在显示的时候为
span[data-w-e-type="attachment"]
绑定一个 click 事件即可
那是不是需要在回显的地方,使用 addEventListener() 注册click事件?
@yangxuefneng 是的,几行代码就可以搞定。
conf改成elemToHtmlConf了
我这边这样修改了一下实现了;
// 生成 html 的函数 function attachmentToHtml(elem: SlateElement, childrenHtml: string): string { const { link = '', fileName = '' } = elem as AttachmentElement // return `<span data-w-e-type="attachment" data-w-e-is-void data-w-e-is-inline data-link="${link}" data-fileName="${fileName}">${fileName}</span>` return `<a data-w-e-type="attachment" data-w-e-is-void data-w-e-is-inline data-link="${link}" data-fileName="${fileName}" href="${link}" target="_blank">${fileName}</a>` } // 配置 const conf = { type: 'attachment', // 节点 type ,重要!!! elemToHtml: attachmentToHtml, } attachmentModule.elemsToHtml = [conf] // 注册。要在创建编辑器之前注册,且只能注册一次,不可重复注册。 Boot.registerModule(attachmentModule)
实际使用场景:写一篇文章,文章内容中上传 zip 附件,如果我想把文章导出为 PDF,那么文中的 zip 附件就只会显示文字名称,点击后无任何反应