UNPKG

mdui.editor

Version:

Material Design 样式的富文本编辑器

58 lines (57 loc) 2.1 kB
import $ from 'mdui.jq/es/$'; import 'mdui.jq/es/methods/each'; import 'mdui.jq/es/methods/is'; import 'mdui.jq/es/methods/parent'; import 'mdui.jq/es/methods/prev'; import 'mdui.jq/es/methods/remove'; import MenuAbstract from './menuAbstract'; /** * ul、ol 两个功能需要继承该类 */ class ListAbstract extends MenuAbstract { /** * 验证列表是否被包裹在 <p> 之内,因为可能同时操作多个列表,所以检查所有列表 * @param $list */ moveListToRoot($list) { $list.each((_, ol) => { const $parent = $(ol).parent(); if ($parent.is(this.$container)) { return; } this.selection.createRangeByElem($parent, false, true); this.command.do('replaceRoot', ol); }); } /** * 把纯文本、b、strong、i、em、a 标签包裹的元素移到 p 标签中,移除 br 标签 */ moveElemToP() { $(this.$container[0].childNodes).each((_, curElem) => { const $curElem = $(curElem); const { nodeType, nodeName, nodeValue, outerHTML, } = curElem; if (nodeType === 3) { // 纯文本,移动到 p 标签中 this.selection.createRangeByElem($curElem.prev(), false, true); this.command.do('insertAfterRoot', nodeValue ? `<p>${nodeValue}</p>` : '<p><br></p>'); $curElem.remove(); return; } if (nodeType !== 1) { // 不是普通 DOM 节点,跳过 return; } if (['B', 'STRONG', 'I', 'EM', 'A'].indexOf(nodeName) > -1) { // 移动到 p 标签中 this.selection.createRangeByElem($curElem, false, true); this.command.do('replaceRoot', outerHTML ? `<p>${outerHTML}</p>` : '<p><br></p>'); return; } if (nodeName === 'BR') { // 移除 br 元素 $curElem.remove(); } }); } } export default ListAbstract;