记录如何在tinymce富文本编辑器中操作dom

记录如何在tinymce富文本编辑器中操作dom

最近业务遇到比较特殊的需求,需要在文档编辑器中操作dom结构,包括增加、修改dom的html结构、标签属性和内容,之前也是因为wangEditor中对这部分操作非常不友好,才换回tinymce。

前言

我其他文章中有tinymce的API汇总,但是基本纯翻译英文文档的API,由于原英文文档中API部分写的…实在一言难尽,所以翻译过来一样是一坨x,所以还是决定把自己用过的API结合自己的具体业务场景记录下来。

业务场景

只有描述清楚需求大家才能知道代码在干什么,直接读代码头又疼眼又干的。
话不多说,我面临的需求是在文档编辑器中将选中部分(可单行,可多行,可选中图片、表格等文档中存在的任何部分)变为一整块div,,然后对这一整块div进行各种操作,包括增加class、id、style等。

实现过程

首先,需要获取选中部分的dom结构,这部分在tinymce中API非常友好,直接使用tinymce.activeEditor.selection.getContent(),返回的是选中部分的内容,包含html结构,类型为String

  const selectContentString = tinymce.activeEditor.selection.getContent()

也可以使用tinymce.activeEditor.selection.getSelectedBlocks()方法,获取到的也是选中部分的html结构,但是数据类型是数组,数组中每个元素即为选中部分的每个html标签以及内部的内容

//选中部分内容的数组,html结构
   const selectContent = tinymce.activeEditor.selection.getSelectedBlocks() 

然后将获取到的内容,通过字符串拼接的方式将外层套上一层div,div中可以添加想要的一切东西,style、id以及自定义属性等等。

// 拼接好最后想要的效果的html,注意数据类型为String
const htmlReplce = `<div id="params=id=${this.workId}" style='background-color:rgb(205, 230, 235)>${selectContentString}</div>`;

然后可以使用tinymce.activeEditor.selection.setContent()方法将拼接好的html插入选中的区域

// 将选中部分重新设置为新HTML
tinymce.activeEditor.selection.setContent(htmlReplce);

这样就可以将选中部分变为一整块了,可以进行任意自己想要的操作了

其他

虽然这个过程很简单,但是难在tinymce的API文档很难懂,API的功能基本都是一个一个试出来的,我在这里记录一下,也节省其他人试错的时间。

// 获取选中部分的节点
const selection = tinymce.activeEditor.selection
let currentElement = selection.getNode()
// 获取选中部分节点的父节点
let parentElement = currentElement.parentNode
// 获取选中部分节点的子节点
let childrenNode = currentElement.childNodes
//删除节点,第一个参数是要删除的节点,第二个参数代表是否保留子节点
selection.dom.remove(currentElement, false)

有用的话,记得点点赞

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值