关于 div 的 contenteditable 使用,placeholder 和 复制图片显示并上传

更新日期: 2019-01-16 阅读: 3.6k 标签: div

当使用文本编辑的时候,首先会使用 textarea ,但是,这个里面不能加入其它标签,也就是不能富文本化。 于是可以使用 contenteditable 

就是给 div 加上该属性。就变得丰富起来。使用的时候,发现有两个问题。


1、placeholder 无法正常使用,解决办法,是加上一段css

.con:empty:before{
	content: attr(placeholder);
	color:#bbb;
}
.con:focus:before{
	content:none;
}


2、复制,或者用 qq 微信 截图只会,在编辑器内,按 ctr+v 不能将图片复制到编辑器内,解决办法是 监听 事件  paste, 这个事件,目前来说兼容不是很好,但是 谷歌 火狐 等都能正常使用

 下面给出完整代码

<!DOCTYPE html>
<html lang="zh">
<head>
	<meta charset="UTF-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1.0" />
	<meta http-equiv="X-UA-Compatible" content="ie=edge" />
	<title>Document</title>
	
	<style type="text/css">
		*{
			padding: 0;
			margin: 0;
		}
		div{
			width: 800px;
			height: 600px;
			border: 1px solid #ccc;
			margin:  20px auto;
		}
		div img{
			max-width: 80%;
		}
		.con:empty:before{
		    content: attr(placeholder);
		    color:#bbb;
		}
		.con:focus:before{
		    content:none;
		}
	</style>
</head>
<body>
	<div contenteditable="true" placeholder="请输入描述内容..."  id="edit"></div>
</body>

<script type="text/javascript" src="js/jquery.js"></script>
<script type="text/javascript">
 
//document.execCommand(‘InsertImage‘, false, filePath);

$("#edit").on("paste",function(e){
	var  d = e.originalEvent;
	if(d&&d.clipboardData) {
		var clipboardData = d.clipboardData;
		//兼容写法,优先取 files
		if(clipboardData.files && clipboardData.files.length > 0){
			console.log("-------files----");
			mapFile(clipboardData.files);
			return ;
		}	
		if (clipboardData.items && clipboardData.items.length > 0) {
			console.log("------items-----------")
			mapFile(clipboardData.items);
            return ;
        }

		
	}
});

function mapFile(files){
	for(var i = 0; i < files.length; i++){
		var c = files[i];
		if(c.type && c.type.split("/")[0] == "image"){
			getBase64(files[i]).then(function(ret){
				document.execCommand("insertImage",false,ret);
			}).catch(function(ret){});
		}
	}
}

function getBase64(img) {
	return new Promise(function(resolve,reject){
		  const reader = new FileReader();
		  reader.addEventListener(‘load‘, () =>{resolve(reader.result)});
		  reader.readAsDataURL(img);
	})
}

</script>
</html>


本文内容仅供个人学习/研究/参考使用,不构成任何决策建议或专业指导。分享/转载时请标明原文来源,同时请勿将内容用于商业售卖、虚假宣传等非学习用途哦~感谢您的理解与支持!

链接: https://fly63.com/article/detial/1829

纯CSS实现Tab切换

说到Tab切换,你可能首先想到的就是使用jQuery,短短几行代码就可以轻松搞定一个Tab切换。而今天所要分享的,是使用 0 行JS代码来实现Tab切换!

css div如何隐藏?

在我们平时布局网站的时候,想要把div进行隐藏,但是很多人不知道css控制div显示隐藏?下面我们来讲解一下css如何让div隐藏。

移动端悬浮div,单点触控

游戏内界面,增加悬浮球;默认展示位置为左上角.手指按住后可随手指在屏幕移动。松手后保持水平方向不变,根据松手时圆球所处的位置(处于屏幕左/右半部分),自动吸附到屏幕左侧/右侧

js点击其他地方隐藏div

web页面常用的一个需求,写下拉菜单是我们往往不是用select_option,而是自定义一个元素列出选项来满足需求,当我们点击按钮出现菜单,点击按钮或菜单以外页面空白地方隐藏该菜单

如何设置DIV可编辑

如何让一个div变成可编辑状态,比如富文本的输入框就可以用可编辑的div(自定义一个富文本时可用),类似textare。有2种方案可以实现:1是通过contenteditable属性设置为true,2是利用css的user-modify属性。

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!