其他分享
首页 > 其他分享> > contenteditable实现输入框踩坑记录

contenteditable实现输入框踩坑记录

作者:互联网

最近用到contenteditable实现输入框,遇到了一些坑,记录一下

点击某个位置,触发插入a标签的点击事件,就会在输入框插入一个a标签,需求就是希望该a标签不可编辑,并且删除的时候(比如按Backspace键)需要将一整个a标签删除。
我一开始是按照下面代码来写的,外面的div设置了contenteditable="true"就是输入框,然后将a标签设置成contenteditable=“false”,这样设置之后a标签就变成不可编辑的了。此处有一个坑:a标签虽然不可编辑了,但是用鼠标点击a标签时,会发现鼠标的光标不见了,此时如果点击了输入框中的a标签之后再点击触发插入a标签的事件,会发现原本输入框中的a标签被嵌套了一个新的a标签,这个其实是和window.getSelection()有关系,所以我就给输入框添加了一个鼠标点击事件,只要点击这个不可编辑的标签,就把光标对焦到该标签最后。

<div contenteditable="true">
	<a contenteditable="false">@1234</a>
</div>

但是这样还有一个兼容性的坑:火狐浏览器设置了contenteditable="false"的标签,用Backspace键是删不掉的,而在谷歌浏览器是可以把a标签整个删除的。
解决方法就是在a标签后面加&#8203,这个是看不见的(不知到什么原理)

总结一下使用contenteditable实现输入框遇到过的坑:

-webkit-user-modify: read-write-plaintext-only;  

火狐存在的问题:

补充相关的知识点
1、添加contenteditable属性让文本处于可编辑状态,<p contenteditable="true">这里可以编辑</p>

contenteditable: "inherit"; (默认)
contenteditable: "plaintext-only";(输入纯文本)
contenteditable: "true";
contenteditable: "false";
contenteditable: "caret";(符号)
contenteditable: "events";(不知道搞啥用的)

2、css的user-modify

user-modify: read-only;
user-modify: read-write;
user-modify: write-only; /*暂不支持*/
user-modify: read-write-plaintext-only; /*输入纯文本,暂时只有谷歌支持*/
-webkit-user-modify: read-write-plaintext-only)

标签:false,记录,标签,modify,输入框,点击,contenteditable
来源: https://blog.csdn.net/qq_43173415/article/details/113772693