需求
- 可以进行文本输入
- 可以动态插入按钮
- 插入按钮之后可以继续输入
分析
- 因为input、textarea这些元素是纯文本的,所以想要插入按钮,就只能用其他的元素例如div这些
解决
- contentEditable:
- 先来认识一下这个属性,内容可编辑设置
- true:内容可编辑
- false:默认,内容不可编辑
- 代码:
<div contentEditable="true">
xxxx
<button contentEditable={false}>xxxx</button>
xxxx
</div>
- 插入之后的结构大概长这样就可以了,插入的方法无论是原生的appendChild或者是react的动态生成等都是可以的
新问题:光标
- 在button元素动态插入之后,我发现光标开始不正常了
- 问题视频
![错误按钮、.gif](https://img-blog.csdnimg.cn/img_convert/43eab90c543aa071e3839adb7abece8b.gif#averageHue=#767739&clientId=u9a482c73-aa26-4&from=drop&id=u4597e08d&originHeight=380&originWidth=848&originalType=binary&ratio=1&rotation=0&showTitle=false&size=203675&status=done&style=none&taskId=u5e86b7a3-1958-47b6-9b92-3df3efe98ed&title=)
解决
- 找了一圈发现把antd的Button放进去是可以的,对比了一下,发现我这边的button少了一个css属性:user-select
- user-select:用户是可以可选择
- 猜测一番是如果用户对按钮可选择,点击button后面的时候,捕获到button身上了,并且button是可选择不可编辑的,所以光标就出不来了
- 代码:
button {
user-select: none;
}
- 成果视频:
![正确按钮.gif](https://img-blog.csdnimg.cn/img_convert/7202ab83e25880160b60efccf07bdc0c.gif#averageHue=#808045&clientId=u9a482c73-aa26-4&from=drop&id=u912be5a3&originHeight=324&originWidth=706&originalType=binary&ratio=1&rotation=0&showTitle=false&size=212771&status=done&style=none&taskId=u8b752411-8a62-40cd-9a69-6ffac6d5cb5&title=)