马黑PHP整站系统

     12
3456789
10111213141516
17181920212223
24252627282930
31      

[复位日记]

最新评论

悄然
飞飞
小希
小希
飞飞

网站统计

·今日访问 : 8
·页面点击 : 10
·当前在线 : 4

2023年12月12日 星期二[阅读 177]

在 contenteditable 的元素中强制P标签的实现思路之一是,监听回车键按下事件,阻止默认行为,加入预设字符:

  1. event.preventDefault();
  2. document.execCommand('insertHTML', false,'<p><br></p>');

这就可以了。不过,当插入有序、无序列表,情况就略微复杂一些,比如Chromium浏览器会使用DIV标签,所以还有很多工作要做:

  1. myDiv.onkeydown = (event) => {
  2. let selection = window.getSelection();
  3. let range = selection.getRangeAt(0);
  4. let currentNode = range.startContainer.parentElement;
  5. let tagName = currentNode.tagName.toLowerCase();
  6. if(event.key === 'Enter') {
  7. if(['ol','ul'].includes(tagName)) {
  8. event.preventDefault();
  9. let li = currentNode.children;
  10. if(li.length > 0) currentNode.removeChild(li[li.length - 1]);
  11. document.execCommand('insertHTML', false,'<p><br></p>');
  12. }else{
  13. document.execCommand('formatBlock',false,'<p><br></p>');
  14. }
  15. }
  16. }

这里,通过 myDiv 键位按下事件,获取选区和范围,从中得到当前节点,然后判断节点名如果为 ol 或 ul,就拦截浏览器默认加标签的行为,该行为会清除最后一个空的li标签,阻止了空的li标签不会被清除,所以还需将其清除掉,最后加入预设加了br节点的P标签。而常规的回车事件则正常加入P标签即可。

这里还没有考虑 Ctrl+Enter 的情况,按这个组合键应被排除在外。

2023': 前一则  下一则    

发表评论:

       

Copyright © 2023 All Right Reserved 马黑PHP文章管理整站系统v1.8
联系我们: gxblk@163.com