div模拟input/textarea实现输入文字图片

div模拟input/textarea实现输入文字图片

1.css

.div-edit {
	font-size: 15px;
	width: 100%;
	height: 40px;
	line-height: 20px;
	padding: 10px 15px;
	border: 1px solid #9f9f9f;
	border-radius: 8px;
	margin: 0;
	display: flex;
	flex-wrap: wrap;
	box-sizing: border-box;
	outline: 0;
	-webkit-appearance: none;
	overflow: auto;
}

.div-edit img {
	height: 24px;
	width: auto;
}

/* 清除左右滚动条 */
.div-edit::-webkit-scrollbar {
	display: none;
}

.div-edit:empty:before {
	content: attr(placeholder);
	color: #999;
}

.div-edit:focus:before {
	content: none;
}

2.html

<div id="saytext" class="div-edit" contenteditable="plaintext-only" placeholder="请输入信息..."></div>
<img src="https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1568102205696&di=9cb52f7f2c062423319fdb31cc669b86&imgtype=0&src=http%3A%2F%2Fb-ssl.duitang.com%2Fuploads%2Fitem%2F201602%2F27%2F20160227213604_BVZYf.jpeg" height="80" onclick="changeSaytext(this)" />
<img src="https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1568102357940&di=aaef4c5eee235a59341d29d94581ae4b&imgtype=0&src=http%3A%2F%2Fimage.retui8.com%2F%3Furl%3Dhttp%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FvwWXNGTJrV2wEtK2Z4iaEzgJP95RdTy73iazdqWib8sDWSlWlhWY7nGuuFeYwXfVQtq23DtkLJUYEDxs9YNy2icQoA%2F640%3F.jpg" height="80" onclick="changeSaytext(this)" />
		

3.js

<script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.js"></script>
<script>
	var range;
	var editor = document.querySelector('#saytext');
	var selection = window.getSelection();

	function initSaytext() {
		editor.onclick = function() {
			if (selection.rangeCount && selection.getRangeAt) {
				range = selection.getRangeAt(0);
				range.deleteContents()
			}
		}
		editor.onkeyup = function() {
			if (selection.rangeCount && selection.getRangeAt) {
				// 设置最后光标对象
				range = selection.getRangeAt(0);
				range.deleteContents()
			}
		}
	}
	initSaytext();
	//div中插入img
	function changeSaytext(e) {
		//内容
		var emojiText = e.cloneNode(true);
		$(emojiText).attr("onclick", ""); //清除点击事件
		editor.focus();
		range = selection.getRangeAt(0);
		range.insertNode(emojiText);
		range = range.cloneRange();
		range.setStartAfter(emojiText);
		// 使光标开始和光标结束重叠
		range.collapse(true);
		// 清除选定对象的所有光标对象
		selection.removeAllRanges();
		// 插入新的光标对象
		selection.addRange(range);
	}
</script>

效果:

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Let dreams fly

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值