初始化contentEditable,强制BR换行,禁止图片换行 可视化编辑器弃坑了,复制粘贴格式化太难搞,把当前进度记录一下。 function editor_inital(id){ document.getElementById(id).contentEditable=true; //强制换行使用BR document.addEventListener('keydown',function(e){ if(e.key!='Enter'){return;}; e.preventDefault(); let s=window.getSelection(),c=document.createRange(),n=document.createElement('BR'); s.getRangeAt(0).deleteContents();s.getRangeAt(0).insertNode(n); s.removeAllRanges();c.setStartAfter(n);s.addRange(c); }); //让图片换不了行 new MutationObserver(function(rec){ for(let key in rec){ if(rec[key].nextSibling && rec[key].nextSibling.tagName=='IMG' && rec[key].nextSibling.previousSibling && rec[key].nextSibling.previousSibling.tagName!='BR'){rec[key].nextSibling.insertAdjacentHTML('beforebegin','<br />');} else if(rec[key].previousSibling && rec[key].previousSibling.tagName=='IMG' && rec[key].previousSibling.nextSibling && rec[key].previousSibling.nextSibling.tagName!='BR'){rec[key].previousSibling.insertAdjacentHTML('afterend','<br />');} else if(rec[key].addedNodes.length){for(let obj of rec[key].addedNodes){if(obj.tagName=='IMG' && obj.previousSibling && obj.previousSibling.tagName!='BR'){obj.insertAdjacentHTML('beforebegin','<br />');};if(obj.tagName=='IMG' && obj.nextSibling && obj.nextSibling.tagName!='BR'){obj.insertAdjacentHTML('afterend','<br />');};};}; }; }).observe(document.getElementById('editor'),{characterData:true,childList:true,subtree:true}); };