扩展RemoveFormat命令以移除<br>标签的技术实现问题求助
解决TinyMCE扩展RemoveFormat移除
<br>标签的问题 我明白你遇到的困扰——修改removeformat配置会误删空段落里的 ,而用选区方法又不知道怎么恢复选中位置。下面给你两个可行的解决方案:
方案一:修正原生RemoveFormat配置(推荐)
直接调整removeformat的格式规则,确保只移除<br>标签,同时保留原有功能且不影响空段落的 。关键是给<br>的规则加上filter过滤,并且保留默认的removeformat规则,避免丢失原有移除格式的能力:
tinymce.init({ // 其他配置... formats: { removeformat: [ // 新增移除<br>的规则 { selector: 'br', remove: 'all', filter: function(node) { // 确保只处理BR节点本身,不波及父元素内容 return node.nodeName === 'BR'; } }, // 保留默认的removeformat规则(复制自TinyMCE默认配置) { selector: 'b,strong,em,i,u,strike,sub,sup,del', remove: 'all', split: true, expand: false, block_expand: true, deep: true }, { selector: 'span', attributes: ['style', 'class'], remove: 'empty', split: true, expand: false, deep: true }, { selector: '*', attributes: ['style', 'class'], remove: 'empty', split: true, expand: false, deep: true } ] } });
这样配置后,执行removeformat命令时会同时移除<br>标签,且不会误删空段落里的 。
方案二:自定义命令+选区恢复(适合复杂自定义逻辑)
如果你需要更灵活的处理逻辑,可以通过自定义命令实现,用TinyMCE的**书签(Bookmark)**来准确恢复选区位置(比直接保存Range更可靠,能应对DOM结构变化):
tinymce.PluginManager.add('customremoveformat', function(editor) { // 自定义移除<br>的命令 editor.addCommand('customRemoveFormat', function() { const selection = editor.selection; // 1. 保存当前选区的书签 const bookmark = selection.getBookmark(); // 2. 获取选区的HTML内容 let selectedContent = selection.getContent({ format: 'html' }); // 3. 移除所有<br>标签(兼容<br>、<br/>、<br >等格式) selectedContent = selectedContent.replace(/<br\s*\/?>/gi, ''); // 4. 将处理后的内容放回选区 selection.setContent(selectedContent); // 5. 恢复之前保存的选区位置 selection.moveToBookmark(bookmark); }); // 可选:给编辑器添加按钮绑定这个命令 editor.ui.registry.addButton('customremoveformat', { icon: 'removeformat', tooltip: 'Remove Format and BR Tags', onAction: function() { editor.execCommand('customRemoveFormat'); } }); });
使用时,在TinyMCE的plugins里添加customremoveformat,并在toolbar里加入customremoveformat按钮即可。
两种方案里,方案一更贴合TinyMCE的原生设计,稳定性更高;方案二则适合需要额外自定义处理的场景。
内容的提问来源于stack exchange,提问作者kemsky
相关产品推荐
相关产品推荐

