dangerouslyUseHTMLString选项来启用自定义 HTML 片段

Old:

js 复制代码
     const msg
     = '切换旧版成功,推荐 <span id="changeMsg" style="color: #47FFF1;; text-decoration: underline;">切换新版</span> 体验最新效果';
     
     const message = ElMessage({
         customClass: 'site-toast',
         dangerouslyUseHTMLString: true,
         message: msg,
         type: 'success',
     });
     // 获取 DOM
     document.getElementById('changeMsg')?.addEventListener('click', () => {
         message.close();
         // 切到新版本
         store.commit('updateOldStyle', []);
     });

New:

使用新的原因:不能直接用addeEventListener,不然重复第二次的时候,点击就无法响应了
h() 函数简介

Vue 提供了一个 h() 函数用于创建 虚拟节点vnodes。

h() 是 hyperscript 的简称------意思是"能生成 HTML (超文本标记语言) 的 JavaScript"。这个名字来源于许多虚拟 DOM 实现默认形成的约定。一个更准确的名称应该是 createVnode(),但当你需要多次使用渲染函数时,一个简短的名字会更省力。

js 复制代码
this.$message({
    customClass: 'site-toast',
     dangerouslyUseHTMLString: true,
     message: h('p', null, [
         h('span', null, '切换旧版成功,推荐 '),
         h('span',
             {
                 onClick: () => {},
                 style: 'color: #47FFF1;text-decoration:underline;cursor:pointer' },
             '切换新版'),
         h('span', null, ' 体验最新效果 '),
     ]),
     type: 'success',
});

h() 函数的使用方式非常的灵活

js 复制代码
const vnode = h('div', { id: 'foo' }, [])

vnode.type // 'div'
vnode.props // { id: 'foo' }
vnode.children // []
vnode.key // null
js 复制代码
// 除了类型必填以外,其他的参数都是可选的
h('div')
h('div', { id: 'foo' })

// attribute 和 property 都能在 prop 中书写
// Vue 会自动将它们分配到正确的位置
h('div', { class: 'bar', innerHTML: 'hello' })

// 像 `.prop` 和 `.attr` 这样的的属性修饰符
// 可以分别通过 `.` 和 `^` 前缀来添加
h('div', { '.name': 'some-name', '^width': '100' })

// 类与样式可以像在模板中一样
// 用数组或对象的形式书写
h('div', { class: [foo, { bar }], style: { color: 'red' } })

// 事件监听器应以 onXxx 的形式书写
h('div', { onClick: () => {} })

// children 可以是一个字符串
h('div', { id: 'foo' }, 'hello')

// 没有 props 时可以省略不写
h('div', 'hello')
h('div', [h('span', 'hello')])

// children 数组可以同时包含 vnodes 与字符串
h('div', ['hello', h('span', 'hello')])

其他

使用a标签去跳转

js 复制代码
const msg ='<a href="***" target="_blank" style="color: #47FFF1;text-decoration: underline;cursor:pointer">点我跳转</a>';

   this.$message({
       customClass: 'site-toast',
       dangerouslyUseHTMLString: true,
       message: `<div style="line-height: 22px;">详情请通过有岑${msg}</div>`,
       iconClass: 'el-message__icon el-icon-error',
   });
}
相关推荐
小兵张健1 小时前
价值1000的 AI 工作流:Codex 通用前端协作模式
前端·aigc·ai编程
sunny_1 小时前
面试踩大坑!同一段 Node.js 代码,CJS 和 ESM 的执行顺序居然是反的?!99% 的人都答错了
前端·面试·node.js
拉不动的猪1 小时前
移动端调试工具VConsole初始化时的加载阻塞问题
前端·javascript·微信小程序
ayqy贾杰3 小时前
Agent First Engineering
前端·vue.js·面试
IT_陈寒3 小时前
SpringBoot实战:5个让你的API性能翻倍的隐藏技巧
前端·人工智能·后端
iceiceiceice4 小时前
iOS PDF阅读器段评实现:如何从 PDFSelection 精准还原一个自然段
前端·人工智能·ios
大金乄4 小时前
封装一个vue2的elementUI 表格组件(包含表格编辑以及多级表头)
前端·javascript
葡萄城技术团队5 小时前
【性能优化篇】面对万行数据也不卡顿?揭秘协同服务器的“片段机制 (Fragments)”
前端
程序员阿峰5 小时前
2026前端必备:TensorFlow.js,浏览器里的AI引擎,不写Python也能玩转智能
前端
Jans5 小时前
Shipfe — Rust 写的前端静态部署工具:一条命令上线 + 零停机 + 可回滚 + 自动清理
前端