• 2018-12-06 进行整理本篇文章,主要是解决如何引入富文本编辑器的使用
  • 2019-06-18 进行了二次完善,解决了富文本编辑器的图片上传和附件上传问题

本篇文章进行二次更新操作,完善了上传图片功能 ,各位只需要将我下方创建的两个servlet的拷贝到你们的servlet里去。另外在修改一下js代码,如图:


今日课堂无聊,简单写了些前台,顺便给大家说说富文本编辑器的使用教程

对于分类描述,我采用了富文本编辑器~KingEditer的插件。
什么是富文本编辑器?

1.搭建富文本编辑器

去KingEditor官网去下载KingEditor文件 kingeditor网址链接: http://kindeditor.net/demo.php [不过要翻墙]
或者直接CSDNhttps://download.csdn.net/download/kese7952/10838028
下载下来解压,把文件放入java项目中

下载解压后,如下图:

我是在WebContent或者WebRoot下新建了一个文件夹Folder,命名为:kindEditer,将lang,plugins,themes,kindediteror-all.js,kindediteror-all-min.js拷贝到kindEditer文件夹下了。如图:

在WebContent里新建了一个页面,命名为header.jsp,在其中引入了部分官方提供模板代码,(大家也可以选择拷贝我的代码:)

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core"  prefix="c" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title><link rel="stylesheet" href="${pageContext.request.contextPath}/css/main.css" /><!--想使用富文本编辑器,需要引入下面三条--><link rel="stylesheet" href="${pageContext.request.contextPath}/kindEditor/themes/default/default.css" /><script charset="utf-8" src="${pageContext.request.contextPath}/kindEditor/kindeditor-all-min.js"></script><script charset="utf-8" src="${pageContext.request.contextPath}/kindEditor/lang/zh_CN.js"></script>
<!-- <script>//简单模式初始化//简单模式  注意:下方中的content属性值要与textarea的name属性值相同才可以var editor;KindEditor.ready(function(K) {editor = K.create('textarea[name="content"]', {resizeType : 1,allowPreviewEmoticons : false,allowImageUpload : false,items : ['fontname', 'fontsize', '|', 'forecolor', 'hilitecolor', 'bold', 'italic', 'underline','removeformat', '|', 'justifyleft', 'justifycenter', 'justifyright', 'insertorderedlist','insertunorderedlist', '|', 'emoticons', 'image', 'link']});});</script> --><script>//默认模式  注意:下方中的content属性值要与textarea的name属性值相同才可以var editor;KindEditor.ready(function(K) {editor = K.create('textarea[name="content"]', {allowFileManager : true,uploadJson:'${pageContext.request.contextPath}/kindeditorUploadServlet',fileManagerJson:'${pageContext.request.contextPath}/kindeditorFileManagerServlet'});K('input[name=getHtml]').click(function(e) {alert(editor.html());});K('input[name=isEmpty]').click(function(e) {alert(editor.isEmpty());});K('input[name=getText]').click(function(e) {alert(editor.text());});K('input[name=selectedHtml]').click(function(e) {alert(editor.selectedHtml());});K('input[name=setHtml]').click(function(e) {editor.html('<h3>Hello KindEditor</h3>');});K('input[name=setText]').click(function(e) {editor.text('<h3>Hello KindEditor</h3>');});K('input[name=insertHtml]').click(function(e) {editor.insertHtml('<strong>插入HTML</strong>');});K('input[name=appendHtml]').click(function(e) {editor.appendHtml('<strong>添加HTML</strong>');});K('input[name=clear]').click(function(e) {editor.html('');});});</script></head>

代码中,我涉及到了两种模式:(二选一)
第一种简约模式,效果如图:

第二种默认的富文本编辑模式,效果如图:

这里,我选择的是第二种模式。【即,把简约模式进行了注释】


以下是我的代码示例:
步骤一:新建一个jsp页面,起名为addCategory.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<%@ include file="/header.jsp" %>
<br/>
<center><form action="${pageContext.request.contextPath}/CategoryServlet?op=addCategory"  method="post"  ><table><tr><td>分类名称:</td><td><input type="text" name="name" ></td></tr><tr><td>分类描述:</td><td><textarea id="mul_input" name="description" style="width:700px;height:200px;visibility:hidden;display: block;"></textarea></tr><tr class="input_control"><td colspan="2"><input type="submit" value="添加图书" id="btn1"  ></td></tr></table></form></center>

首先我是在addCategory.jsp的开头就引进了一个header页面,header页面代码如下:

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core"  prefix="c" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title><link rel="stylesheet" href="${pageContext.request.contextPath}/kingEditer/themes/default/default.css" /><link rel="stylesheet" href="${pageContext.request.contextPath}/css/main.css" /><script charset="utf-8" src="${pageContext.request.contextPath}/kingEditer/kindeditor-all-min.js"></script><script charset="utf-8" src="${pageContext.request.contextPath}/kingEditer/lang/zh_CN.js"></script>
<!-- <script>//简单模式初始化var editor;KindEditor.ready(function(K) {editor = K.create('textarea[name="description"]', {resizeType : 1,allowPreviewEmoticons : false,allowImageUpload : false,items : ['fontname', 'fontsize', '|', 'forecolor', 'hilitecolor', 'bold', 'italic', 'underline','removeformat', '|', 'justifyleft', 'justifycenter', 'justifyright', 'insertorderedlist','insertunorderedlist', '|', 'emoticons', 'image', 'link']});});</script> --><script>//默认模式var editor;KindEditor.ready(function(K) {editor = K.create('textarea[name="description"]', {allowFileManager : true    });K('input[name=getHtml]').click(function(e) {alert(editor.html());});K('input[name=isEmpty]').click(function(e) {alert(editor.isEmpty());});K('input[name=getText]').click(function(e) {alert(editor.text());});K('input[name=selectedHtml]').click(function(e) {alert(editor.selectedHtml());});K('input[name=setHtml]').click(function(e) {editor.html('<h3>Hello KindEditor</h3>');});K('input[name=setText]').click(function(e) {editor.text('<h3>Hello KindEditor</h3>');});K('input[name=insertHtml]').click(function(e) {editor.insertHtml('<strong>插入HTML</strong>');});K('input[name=appendHtml]').click(function(e) {editor.appendHtml('<strong>添加HTML</strong>');});K('input[name=clear]').click(function(e) {editor.html('');});});</script></head>
<body><h1>欢迎来到趣读书屋</h1><br/><br/><ul><li><a href="">添加分类</a></li><li><a href="">添加图书</a></li><li><a href="">用户注册</a></li><li><a href="">用户登录</a></li><li><a href="">购物车</a></li><li><a href="">我的订单</a></li></ul><br/><br/><hr/>

【2019.06】完善上传功能实现

1. 上传Jar包

commons-collections-3.2.1.jar
commons-fileupload-1.3.1.jar
commons-io-2.4.jar
json_simple-1.1.jar
关于如何下载jar包,可以查看https://mryang.blog.csdn.net/article/details/91410923

2. 创建两个Servlet
2.1 第一个Servlet命名为 KindeditorFileManagerServlet
package cn.javabs.school.servlet;import org.json.simple.JSONObject;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Collections;
import java.util.Comparator;
import java.text.SimpleDateFormat;
import java.util.*;@WebServlet("/kindeditorFileManagerServlet")
public class KindeditorFileManagerServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request,response);}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {response.setContentType("text/html");PrintWriter out = response.getWriter();/*** KindEditor JSP** 本JSP程序是演示程序,建议不要直接在实际项目中使用。 如果您确定直接使用本程序,使用之前请仔细确认相关安全设置。**/// 根目录路径,可以指定绝对路径,比如 /var/www/attached/String rootPath = getServletContext().getRealPath("/") + "attached/";// 根目录URL,可以指定绝对路径,比如 http://www.yoursite.com/attached/String rootUrl = request.getContextPath() + "/attached/";// 图片扩展名String[] fileTypes = new String[] { "gif", "jpg", "jpeg", "png", "bmp" };String dirName = request.getParameter("dir");if (dirName != null) {if (!Arrays.<String> asList(new String[] { "image", "flash", "media", "file" }).contains(dirName)) {out.println("Invalid Directory name.");return;}rootPath += dirName + "/";rootUrl += dirName + "/";File saveDirFile = new File(rootPath);if (!saveDirFile.exists()) {saveDirFile.mkdirs();}}// 根据path参数,设置各路径和URLString path = request.getParameter("path") != null ? request.getParameter("path") : "";String currentPath = rootPath + path;String currentUrl = rootUrl + path;String currentDirPath = path;String moveupDirPath = "";if (!"".equals(path)) {String str = currentDirPath.substring(0,currentDirPath.length() - 1);moveupDirPath = str.lastIndexOf("/") >= 0 ? str.substring(0, str.lastIndexOf("/") + 1) : "";}// 排序形式,name or size or typeString order = request.getParameter("order") != null ? request.getParameter("order").toLowerCase() : "name";// 不允许使用..移动到上一级目录if (path.indexOf("..") >= 0) {out.println("Access is not allowed.");return;}// 最后一个字符不是/if (!"".equals(path) && !path.endsWith("/")) {out.println("Parameter is not valid.");return;}// 目录不存在或不是目录File currentPathFile = new File(currentPath);if (!currentPathFile.isDirectory()) {out.println("Directory does not exist.");return;}// 遍历目录取的文件信息List<Hashtable> fileList = new ArrayList<Hashtable>();if (currentPathFile.listFiles() != null) {for (File file : currentPathFile.listFiles()) {Hashtable<String, Object> hash = new Hashtable<String, Object>();String fileName = file.getName();if (file.isDirectory()) {hash.put("is_dir", true);hash.put("has_file", (file.listFiles() != null));hash.put("filesize", 0L);hash.put("is_photo", false);hash.put("filetype", "");} else if (file.isFile()) {String fileExt = fileName.substring(fileName.lastIndexOf(".") + 1).toLowerCase();hash.put("is_dir", false);hash.put("has_file", false);hash.put("filesize", file.length());hash.put("is_photo", Arrays.<String> asList(fileTypes).contains(fileExt));hash.put("filetype", fileExt);}hash.put("filename", fileName);hash.put("datetime",new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(file.lastModified()));fileList.add(hash);}}if ("size".equals(order)) {Collections.sort(fileList, new SizeComparator());} else if ("type".equals(order)) {Collections.sort(fileList, new TypeComparator());} else {Collections.sort(fileList, new NameComparator());}JSONObject result = new JSONObject();result.put("moveup_dir_path", moveupDirPath);result.put("current_dir_path", currentDirPath);result.put("current_url", currentUrl);result.put("total_count", fileList.size());result.put("file_list", fileList);response.setContentType("application/json; charset=UTF-8");out.println(result.toJSONString());out.close();}public class NameComparator implements Comparator {public int compare(Object a, Object b) {Hashtable hashA = (Hashtable) a;Hashtable hashB = (Hashtable) b;if (((Boolean) hashA.get("is_dir"))&& !((Boolean) hashB.get("is_dir"))) {return -1;} else if (!((Boolean) hashA.get("is_dir"))&& ((Boolean) hashB.get("is_dir"))) {return 1;} else {return ((String) hashA.get("filename")).compareTo((String) hashB.get("filename"));}}}public class SizeComparator implements Comparator {public int compare(Object a, Object b) {Hashtable hashA = (Hashtable) a;Hashtable hashB = (Hashtable) b;if (((Boolean) hashA.get("is_dir"))&& !((Boolean) hashB.get("is_dir"))) {return -1;} else if (!((Boolean) hashA.get("is_dir"))&& ((Boolean) hashB.get("is_dir"))) {return 1;} else {if (((Long) hashA.get("filesize")) > ((Long) hashB.get("filesize"))) {return 1;} else if (((Long) hashA.get("filesize")) < ((Long) hashB.get("filesize"))) {return -1;} else {return 0;}}}}public class TypeComparator implements Comparator {public int compare(Object a, Object b) {Hashtable hashA = (Hashtable) a;Hashtable hashB = (Hashtable) b;if (((Boolean) hashA.get("is_dir"))&& !((Boolean) hashB.get("is_dir"))) {return -1;} else if (!((Boolean) hashA.get("is_dir"))&& ((Boolean) hashB.get("is_dir"))) {return 1;} else {return ((String) hashA.get("filetype")).compareTo((String) hashB.get("filetype"));}}}
}
2.2 第二个Servlet命名为 KindeditorUploadServlet
package cn.javabs.school.servlet;import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.json.simple.JSONObject;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.*;@WebServlet("/kindeditorUploadServlet")
public class KindeditorUploadServlet extends HttpServlet {public KindeditorUploadServlet() {super();}private String getError(String message) {JSONObject obj = new JSONObject();obj.put("error", 1);obj.put("message", message);return obj.toJSONString();}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {/*** KindEditor JSP** 本JSP程序是演示程序,建议不要直接在实际项目中使用。 如果您确定直接使用本程序,使用之前请仔细确认相关安全设置。**/request.setCharacterEncoding("utf-8");response.setCharacterEncoding("utf-8");PrintWriter out = response.getWriter();// 文件保存目录路径String savePath = getServletContext().getRealPath("/") + "attached/";System.out.println("savePath:" + savePath);// 文件保存目录URLString saveUrl = request.getContextPath() + "/attached/";// 定义允许上传的文件扩展名HashMap<String, String> extMap = new HashMap<String, String>();extMap.put("image", "gif,jpg,jpeg,png,bmp");extMap.put("flash", "swf,flv");extMap.put("media", "swf,flv,mp3,wav,wma,wmv,mid,avi,mpg,asf,rm,rmvb");extMap.put("file", "doc,docx,xls,xlsx,ppt,htm,html,txt,zip,rar,gz,bz2");// 最大文件大小long maxSize = 1000000;response.setContentType("application/json; charset=UTF-8");if (!ServletFileUpload.isMultipartContent(request)) {out.println(getError("请选择文件。"));return;}// 检查目录File uploadDir = new File(savePath);if (!uploadDir.isDirectory()) {uploadDir.mkdirs();
//            out.println(getError("上传目录不存在。"));return;}// 检查目录写权限if (!uploadDir.canWrite()) {out.println(getError("上传目录没有写权限。"));return;}String dirName = request.getParameter("dir");if (dirName == null) {dirName = "image";}if (!extMap.containsKey(dirName)) {out.println(getError("目录名不正确。"));return;}// 创建文件夹savePath += dirName + "/";saveUrl += dirName + "/";File saveDirFile = new File(savePath);if (!saveDirFile.exists()) {saveDirFile.mkdirs();}SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");String ymd = sdf.format(new Date());savePath += ymd + "/";saveUrl += ymd + "/";File dirFile = new File(savePath);if (!dirFile.exists()) {dirFile.mkdirs();}FileItemFactory factory = new DiskFileItemFactory();ServletFileUpload upload = new ServletFileUpload(factory);upload.setHeaderEncoding("UTF-8");try {List items = upload.parseRequest(request);Iterator itr = items.iterator();while (itr.hasNext()) {FileItem item = (FileItem) itr.next();String fileName = item.getName();long fileSize = item.getSize();if (!item.isFormField()) {// 检查文件大小if (item.getSize() > maxSize) {out.println(getError("上传文件大小超过限制。"));return;}// 检查扩展名String fileExt = fileName.substring(fileName.lastIndexOf(".") + 1).toLowerCase();if (!Arrays.<String> asList(extMap.get(dirName).split(",")).contains(fileExt)) {out.println(getError("上传文件扩展名是不允许的扩展名。\n只允许"+ extMap.get(dirName) + "格式。"));return;}SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");String newFileName = df.format(new Date()) + "_"+ new Random().nextInt(1000) + "." + fileExt;try {File uploadedFile = new File(savePath, newFileName);item.write(uploadedFile);} catch (Exception e) {out.println(getError("上传文件失败。"));return;}JSONObject obj = new JSONObject();obj.put("error", 0);obj.put("url", saveUrl + newFileName);out.println(obj.toJSONString());}}} catch (FileUploadException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}}
}
3. 在jsp中引入以下代码
 <!-- 以下是kindEditor 需要用的静态资源 --><link rel="stylesheet" href="${pageContext.request.contextPath}/admin/resource/kindEditor/themes/default/default.css" /><script charset="utf-8" src="${pageContext.request.contextPath}/admin/resource/kindEditor/kindeditor-all-min.js"></script><script charset="utf-8" src="${pageContext.request.contextPath}/admin/resource/kindEditor/lang/zh-CN.js"></script><script type="text/javascript">$(function () {$("#saveUpdateForm").validate({debug:false});});</script>
<script>//默认模式  注意:下方中的content属性值要与textarea的name属性值相同才可以var editor;KindEditor.ready(function(K) {editor = K.create('textarea[name="content"]', {allowFileManager : true,uploadJson:'${pageContext.request.contextPath}/kindeditorUploadServlet',fileManagerJson:'${pageContext.request.contextPath}/kindeditorFileManagerServlet'});K('input[name=getHtml]').click(function(e) {alert(editor.html());});K('input[name=isEmpty]').click(function(e) {alert(editor.isEmpty());});K('input[name=getText]').click(function(e) {alert(editor.text());});K('input[name=selectedHtml]').click(function(e) {alert(editor.selectedHtml());});K('input[name=setHtml]').click(function(e) {editor.html('&lt;h3&gt;Hello KindEditor&lt;/h3&gt;');});K('input[name=setText]').click(function(e) {editor.text('&lt;h3&gt;Hello KindEditor&lt;/h3&gt;');});K('input[name=insertHtml]').click(function(e) {editor.insertHtml('&lt;strong&gt;插入HTML&lt;/strong&gt;');});K('input[name=appendHtml]').click(function(e) {editor.appendHtml('&lt;strong&gt;添加HTML&lt;/strong&gt;');});K('input[name=clear]').click(function(e) {editor.html('');});});</script><body><label>文章正文</label><textarea id="entityContent" name="content" style="width:800px;height:400px;visibility:hidden;" data-rule-required="true"></textarea></body>

注意:

因为我在设计分类实体的属性时,采用了描述的单词[description],所以我在表单中的属性值也是description,所以在header中的content需要改成description,才会有效!!!

此时的富文本编辑器就实现了。
但是我还加入一些css样式,在WebContent下创建一个文件夹,命名为css,并且在css文件夹中船舰了一个文件,命名为main.css
代码如下:

@CHARSET "UTF-8";body {margin: 20 auto; font-size : 12px;text-align: center;font-size: 12px;
}
/* 导航栏 */
ul {list-style: none;margin-left: 280px;
}
/*无序列表*/
li {float: left; /* 向左悬浮起来 */height: 30px;/* 告诉为30像素 */width: 100px;/* 宽度为100像素 */color: white;/* 向左悬浮起来 */background-color: red;/* 背景颜色为红色 */margin-left: 3px;/* 每个li向左空开3个像素 */border-radius: 15px 15px 0 0;/* 属于css3的样式: 加入圆角边框的形式;上边出现圆角弧度,下边没有弧度。若想都设置为带有弧度,可以全部填写15px   */
}
/* 未点击时的超链接 */
li a:LINK {font-size: 14px;/* 字体大小 */line-height: 32px; /* 字体行高 */text-decoration: none; /* 去除下划线 */color: #efefef;     /* 字体颜色 */
}/* 鼠标悬浮时的超链接 */
li a:hover {background-color: #e151ff;color: #efefef;
}
/* 添加分类 */
table {margin: 20 auto;font-size: 14px;text-align: center;
}/*添加分类的按钮*/
#btn1 {width: 160px;margin: 20px auto;box-sizing: border-box;text-align: center;border-radius: 4px;border: 1px solid #c8cccf;color: #6a6f77;-web-kit-appearance: none;-moz-appearance: none;display: block;outline: 0;padding: 0 1em;text-decoration: none;height: 2.7em;width: 30%;
}.form-input {-web-kit-appearance: none;-moz-appearance: none;font-size: 1.4em;height: 2.7em;border-radius: 4px;border: 1px solid #c8cccf;color: #6a6f77;
}input[type="text"], #btn2 {box-sizing: border-box;text-align: center;height: 2.7em;font-size: 1.4em;border-radius: 4px;border: 1px solid #c8cccf;color: #6a6f77;-web-kit-appearance: none;-moz-appearance: none;display: block;outline: 0;padding: 0 1em;text-decoration: none;width: 100%;
}input[type="text"]:focus {border: 1px solid #ff7496;
}
下载代码

https://github.com/yangsir1688/kindeditor-fileUploadDemo

作者: 杨校

出处: https://blog.csdn.net/kese7952

分享是快乐的,也见证了个人成长历程,文章大多都是工作经验总结以及平时学习积累,基于自身认知不足之处在所难免,也请大家指正,共同进步。

本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出, 如有问题, 可邮件(397583050@qq.com)咨询。

杨老师教你学会使用富文本编辑器KindEditor之添加页面设计相关推荐

  1. Django 3.2.5博客开发教程:使用富文本编辑器添加数据

    在Django admin后台添加数据的时候,文章内容文本框想发布一篇图文并茂的文章需就得手写Html代码,这十分吃力,也没法上传图片和文件.这显然不是我等高大上程序猿想要的. 为提升效率,我们可以使 ...

  2. vue获取编辑器纯文字_vue中使用富文本编辑器

    前端使用富文本编辑器的插件有很多,今天献上wangeditor的使用教程,教你如何在vue中使用富文本编辑器 wangeditor是一个萌新富文本编辑器,基于js和css,重点在于它轻量,如果你需要的 ...

  3. Django实现的博客系统中使用富文本编辑器ckeditor

    操作系统为OS X 10.9.2,Django为1.6.5. 1.下载和安装 1.1 安装 ckeditor 下载地址 https://github.com/shaunsephton/django-c ...

  4. CSDN使用富文本编辑器为所发布的文章生成右侧目录

    如果我们想为我们的文章生成相应的目录,在不使用MD编辑器的情况下,我们使用富文本编辑器也是可以为我们的文章生成目录(特别提醒:最少需设置4个标题这样才能看出效果).我们可以假设需要发布的文章已经编辑好 ...

  5. 微信小程序-后台使用富文本编辑器返回数据,小程序编译富文本编辑器返回的数据

    最近遇到一个功能,后台管理系统添加商品的时候,商品详情是使用富文本编辑器添加的.小程序获取的商品详情数据是含有<p>标签的. 后台管理系统 百度了多种方法,也试用了很多方法,最终觉得wxP ...

  6. Django中使用富文本编辑器Uedit

    Uedit是百度一款非常好用的富文本编辑器 一.安装及基本配置 官方GitHub(有详细的安装使用教程):https://github.com/zhangfisher/DjangoUeditor 1. ...

  7. 小程序使用富文本编辑器以及使用wxParse解析html结构

    小程序使用富文本编辑器以及使用wxParse解析html结构 13小程序发布文章功能(富文本编辑器的使用和解析html结构数据的wxParse)

  8. 学习日志day46(2021-09-10)(1、使用富文本编辑器simditor)

    学习内容:学习JavaWeb(Day46) 1.使用富文本编辑器simditor 1.使用富文本编辑器simditor (1)常见的富文本编辑器有simditor.CKEditor.tinymce.k ...

  9. 使用富文本编辑器wangEditor完成图片文件的上传

    项目中一些特定的功能可能需要在页面中用到富文本编辑器来实现文件的输入上传等等,在这里用wangEditor来实现使用富文本编辑器进行文件图面的输入和上传保存,这里wangEditor也可以参考wang ...

最新文章

  1. SpringBoot配置文件YAML
  2. 如何在require中使用VUE
  3. *[topcoder]TheTree
  4. Linux中的SELinux与chcon以及Samba实现【转】
  5. 结对编程1 - 四则运算生成器的改进(201421123040,60,61)
  6. matlab 数字调制函数,matlab用于数字调制,几个函数的使用问题
  7. react.js 多个组件集成示例
  8. Linux的安装和使用技巧
  9. Zookeeper集群leader选举机制
  10. 史上最全的OpenCV入门教程
  11. sql studio索引超出了数组界限
  12. java 添加jbutton_在java中怎样在JLabel上添加JButton呢
  13. ppt背景图片计算机教学知识,数学课件ppt背景图片
  14. springmvc(2)处理器设配器和映射器
  15. 七月三日服务器维护,7月3日全部服务器更新维护公告
  16. strlen、strcpy、strcmp、strcat函数的实现
  17. 送外卖优先级_美团众包派单规则是怎么样的?主要是这四点!
  18. 跳点搜索算法 (JPS算法) 效率优化(摘录)
  19. 百度推广赢在中国 :农民的蓝海
  20. teamcenter 异步服务_Teamcenter 详细功能概述

热门文章

  1. Linux中的which和whereis
  2. 2018年系统架构设计师 下午案例分析真题
  3. 教学目标四个维度_【智慧】育人目标导向的跨学科课程设计
  4. Pytorch实现FCN图像语义分割网络
  5. 三态门有一个信号控制端en_单片机基础电路
  6. SFM之通过exif获取初始焦距
  7. 使用eclipse的时候突然鼠标光标变成黑色小方块
  8. 【Python】Numpy中的argmax()函数
  9. Mac 常用快捷键(Alfred+workflow+IDEA)
  10. 关于CPU过热导致主机自行断电重启的解决办法