KindEditor是一个功能十分齐全的富文本编辑器,官网地址:http://kindeditor.net/demo.php

 

下载引入

http://www.kindsoft.net/down.php

  • 删掉asp、asp.net、jsp、php

  • lang里面只保留zh-CN.js
    语言只使用简体中文

  • themes里删掉qq、simple
    我只使用默认的主题default,qq、simple这2种主题都不用,也可以保留

弄好之后放在reources/plugins下

 

前端使用KindEditor

<body>
<form action="/handler" method="post">
    <!-- 使用textarea作为容器 -->
    <textarea id="editor" name="editor" style="width:700px;height:300px;">请输入内容</textarea>
    <button type="submit">提交</button>
</form>

<!-- 引入KindEditor的2个js文件,上线时kindeditor-all.js换为min版 -->
<script charset="utf-8" src="/plugin/kindeditor/kindeditor-all.js"></script>
<script charset="utf-8" src="/plugin/kindeditor/lang/zh-CN.js"></script>
    
<script>
	// 此变量代表KindEditor富文本编辑器,如果后续不使用此变量,也可以放在函数中
    let editor;
    
    // 创建KindEditor富文本编辑器,也可以在js或jq的就绪函数中创建
    KindEditor.ready(function () {
        editor = KindEditor.create('#editor', {
            uploadJson: '/fileHandler',  //指定处理KindEditor上传文件的controller
            filePostName: 'file'  //指定KindEditor上传文件使用的字段名
        });
    });

</script>

</body>

 

常用方法

  • editor.focus() 聚焦

  • editor.isEmpty() 判断文本域中是否有内容,返回boolean

  • editor.html() 获取文本域的内容(转换为html代码) 返回string

如果使用ajx提交,可以用editor.html()获取文本域的内容放在data中;
如果使用js或jq的val属性来获取文本域的内容,需要先sync()同步,不然获取到的值是剔除html标签的。

editor.sync();

let str=document.getElementById("editor").value;
// let str = $("#editor").val;
  • editor.html(string val) 设置文本域的内容,会自动解析val中的html标签。thymeleaf的 <th:utext>也可有同样的效果。

 

后端处理表单

提交的是editor.html(),包含html标签(富文本),用一个String来接收。

如果把这个值作为json数据返回给浏览器,浏览器会解析其中的html标签。
 

处理KindEditor上传的文件

上传文件、文本域内容的处理是分开的

/**
 * 处理KindEditor上传的文件都用此方法处理
 */
@PostMapping("/fileHandler")
@ResponseBody
public Map fileUpload(HttpServletRequest request, @RequestParam("file") List<MultipartFile> fileList) {
    Map map = new HashMap<String, Object>();

    // 检测用户是否上传了文件
    if (!fileList.isEmpty() && fileList.size()>0){

        // 处理上传文件
        for (MultipartFile tempFile:fileList){
            // 使用uuid防止文件重名,原文件名中包含扩展名,放最后面
            String newFilename= UUID.randomUUID()+"_"+tempFile.getOriginalFilename();
            File file = new File("/upload/" + newFilename);
            System.out.println(file.getPath());
            // 如果要对不同类型的文件做不同处理,可以判断文件类型,也可以根据原文件名来判断
            // String fileType = file.getContentType();
            try {
                // 保存文件
                tempFile.transferTo(file);
                map.put("error", 0);
                map.put("url", file.getPath());
            } catch (IOException e) {
                e.printStackTrace();
                map.put("error", 1);
                map.put("message", "上传文件失败!");
            }
        }
    }
    else {
        map.put("error", 1);
        map.put("message", "请先选择要上传的文件!");
    }
    return map;
}

KindEditor的作者规定:要返回一个2个参数

  • error 结果代码,0表示成功,1表示失败
  • 如果成功传递保存路径;如果失败传递失败原因

 

ajax

K.ajax(
	'../xxx/xxx',
	data => {  //回调函数
		//.....
	},
	'POST',
	{   //携带的数据
        name : 'chy',
        age : 20
	}
);

请求方式、携带的数据均可选,缺省请求方式时默认为get。