最近做的一个项目要做一个富文本编辑器,于是用来summernote。它的用法和注意点如下:
前端代码HTML:
<div class="form-group"> <label class="col-sm-2 control-label">反馈内容:</label> <div class="col-sm-10"> <input id="feedbackContent" name="feedbackContent" type="hidden"> <div class="summernote"></div> </div> </div>
js代码:
<script type="text/javascript">
var prefix = ctx + "system/info"
//用类选择器给class = summernote的div添加一个summernote富文本编辑器 $('.summernote').summernote({ placeholder: '请输入反馈内容', height : 192, lang : 'zh-CN', followingToolbar: false,
//回调函数onImageUpload callbacks: { onImageUpload: function (files) {
//调用文件上传函数 sendFile(files[0], this); } } }); // 上传文件 function sendFile(file, obj) {
/*ormData是ajax2.0(XMLHttpRequest Level2)新提出的接口,利用FormData对象可以将form表单元素的name与value进行组合,
实现表单数据的序列化,从而介绍表单元素的拼接,提高工作效率*/
//新建一个FormData对象,FormData是将数据以键值对形式
var data = new FormData();
//给data对象里面添加键值对
data.append("file", file);
$.ajax({ type: "POST", url: ctx + "file/upload", data: data,
// cache: true和false的区别是:true的话会读缓存而且真的到服务器上;alse的话会在url后面加一个时间缀,而是让它跑到服务器获取结果。
cache: false,
//contentType代表发送信息至服务器时内容编码类型,通俗点说就是告诉服务器从浏览器提交过来的数据格式。
contentType: false,
//processData默认为true(该方法为jQuery独有的)默认情况下会将发送的数据序列化以适应默认的内容类型
//application/x-www-form-urlencoded如果想发送不想转换的的信息的时候需要手动将其设置为false
processData: false,
dataType: 'json',
//在ajax向后端controller发送数据,并且controller正确执行,正确返回之后执行success success: function(result) { if (result.code == web_status.SUCCESS) {
// $(obj).summernote('editor.insertImage', result.data.url, result.data.fileName); } else { $.modal.alertError(result.msg); } }, error: function(error) { $.modal.alertWarning("图片上传失败。"); } }); } /*校验*/ $("#form-info-add").validate({ focusCleanup: true }); /*提交*/ function submitHandler() { if ($.validate.form()) { var sHTML = $('.summernote').summernote('code'); $("#feedbackContent").val(sHTML); $.operate.save(prefix + "/add", $('#form-info-add').serialize()); } } </script>
注意点:当summernote中添加表格时,数据库不能保存标签,只有纯文本,这时需要在application.yml中添加一个配置:
# 排除链接(多个用逗号分隔)
excludes: /system/notice/*,/system/info*