富文本框KindEditor的使用技巧

富文本框KindEditor的使用技巧

最近在项目中经常遇到使用富文本框的情况,当然我们所接触的富文本.框有很多,我个人还是比较偏向于KE(KindEditor)),用起来比较舒服,但是很多新手在用的时候往往会感到不知所措。总感觉API写了很多但是就是不知道怎么去用,今天我就和大家讲讲KE的使用和基本技巧:

第一步:我们需要到官网上引用相关的资源包,点击进入官网下载资源包
第二步:引用资源文件

如图所示第一个default.css主要是为了修改我们KE的样式,第二个kindeditor-min.js是KE核心功能脚本库,第三个zh_CN.js是语言汉化的脚本。

第三步:编写对应html代码,只需要引入如下代码即可:
<textarea cols="0" rows="5" name="introduction" class="form-control" id="demo" style="margin: 0px -0.5px 0px 0px; height: 250px; width:100%;">
//这和我们使用的TextArea没有任何区别,不用写上非常复杂的html代码。是不是很简洁?
</textarea>
第四步:我们需要在JS中初始化控件属性,以上面的为例。我们需要写出如下代码:
<script type="text/javascript">
 initkindEditor();
 //初始化富文本
 function initkindEditor() {
     KindEditor.ready(function (K) {
         var editor = K.create(‘#demo‘, {
             themeType: "simple",
             uploadJson: ‘../../KEHandler/upload_json.ashx?action=upload_base‘,
             resizeType: 1,
             pasteType: 2,
             syncType: "",
             filterMode: true,
             allowPreviewEmoticons: false,
             items: [
                    ‘source‘, ‘undo‘, ‘redo‘, ‘plainpaste‘, ‘wordpaste‘, ‘clearhtml‘, ‘quickformat‘,
                    ‘selectall‘, ‘fullscreen‘, ‘fontname‘, ‘fontsize‘, ‘|‘, ‘forecolor‘, ‘hilitecolor‘,
                    ‘bold‘, ‘italic‘, ‘underline‘, ‘hr‘, ‘removeformat‘, ‘|‘, ‘justifyleft‘, ‘justifycenter‘,
                    ‘justifyright‘, ‘insertorderedlist‘, ‘insertunorderedlist‘, ‘|‘, ‘link‘, ‘image‘,
                    ‘unlink‘, ‘baidumap‘, ‘emoticons‘
                ],
             afterCreate: function () {
                 this.sync();
             },
             afterBlur: function () {
                 this.sync();
             },
             afterChange: function () {
                //富文本输入区域的改变事件,一般用来编写统计字数等判断
                  K(‘.word_count1‘).html("最多20000个字符,已输入" + this.count() + "个字符");
             },
             afterUpload:function(url){
               //上传图片后的代码
             },
             allowFileManager: false,
             allowFlashUpload: false,
             allowMediaUpload: false,
             allowFileUpload: false
         });
     });
 }
我们先来看下运行效果:

如图所示我们可以看到KE的界面已经显示出来了,从界面上我们可以看到有很多功能按钮,主要包括对齐、加粗、字体颜色、字体大小等,另外就是我们所经常用到的图片上传表情插入。那么接下来我们看看如何去使用?

第一种:本地上传图片至富文本中效果图如下:
1、点击上传图片按钮

2、选择本地上传,选择一张图片

3、图片上传完成,选中对应的图片还可以调整图片的比例

那么上传的代码究竟是怎么实现的呢?

下图是初始化的代码相信还有印象吧?红色标记的位置就是本地上传的后台接口地址,这个地址可以由你实际编写的后台上传代码决定。

我们看下后台的代码是怎么实现的?
 #region 定义一个方法上传本地照片
        public void Upload_Native_pic(HttpContext context, string savePath, string website)
        {
           //定义允许上传的文件扩展名
           Hashtable extTable = new Hashtable();
           extTable.Add("image", "gif,jpg,jpeg,png,bmp");
           //最大图片的大小
           int maxSize = 10240000;

           //获取照片资源
           HttpPostedFile imgFile = context.Request.Files["imgFile"];
           if (imgFile == null)
           {
               showError("请选择文件。",context);
           }

           if (!Directory.Exists(savePath))
           {
               showError("上传目录不存在。",context);
           }
           string dirName = context.Request.QueryString["dir"];
           if (String.IsNullOrEmpty(dirName))
           {
               dirName = "image";
           }
           if (!extTable.ContainsKey(dirName))
           {
               showError("目录名不正确。",context);
           }
           string fileName = imgFile.FileName;
           string fileExt = Path.GetExtension(fileName).ToLower();
           if (imgFile.InputStream == null || imgFile.InputStream.Length > maxSize)
           {
               showError("上传文件大小超过限制。",context);
           }
           if (String.IsNullOrEmpty(fileExt) || Array.IndexOf(((String)extTable[dirName]).Split(‘,‘), fileExt.Substring(1).ToLower()) == -1)
           {
               showError("上传文件扩展名是不允许的扩展名。\n只允许" + ((String)extTable[dirName]) + "格式。",context);
           }
           website += dirName + "/";
           savePath += dirName + "/";
           if (!Directory.Exists(savePath))
           {
               Directory.CreateDirectory(savePath);
           }
           String ymd = DateTime.Now.ToString("yyyyMMdd", DateTimeFormatInfo.InvariantInfo);
           website += ymd + "/";
           savePath+=ymd+"/";
           if (!Directory.Exists(savePath))
           {
               Directory.CreateDirectory(savePath);
           }
           string  newFileName = DateTime.Now.ToString("yyyyMMddHHmmss_ffff", DateTimeFormatInfo.InvariantInfo) + fileExt;
           string filePath = savePath + newFileName;
            //图片路径
           string  fileUrl = website + newFileName;
           // 开始下载图片
           new ApplicationUtil().DownLoadNativePIC(imgFile.InputStream, filePath); 

           JSONHelper json = new JSONHelper();
           json.AddItem1("error",0);
           json.AddItem("url",fileUrl);
           json.ItemOk();
           string res = json.ToString().Substring(1, json.ToString().Length -2);
           context.Response.AddHeader("Content-Type", "text/html; charset=UTF-8");
           context.Response.Write(res);
           context.Response.End();
        }
        #endregion

后台代码其实就是一个处理图片上传的功能,最终返回的的json结构式为{‘error’:’ ‘,’url’:’ ‘}就可以了,成功的时候error为0,url为图片对应相对地址,错误的时候{‘error’:’1’,’message’:’对不起图片上传失败’}

这里以C#为例有一点需要注意,那就是返回json的头部信息需要改为:

context.Response.AddHeader("Content-Type", "text/html; charset=UTF-8");
至于图片下载到什么地方以及图片是否需要压缩或者裁剪按照平时的处理方式即可。到此为止我们就知道了本地上传的处理,那么有的时候我们会遇到一个问题,那就是我们的图片可能不是来自于本地,而是链接或者是从别的网站上复制粘贴过来的,这个时候我们又该怎么处理呢?
我们需要额外引入相关的js文件,如下图所示我们引入一个叫auto.js的文件,这里我把源码粘贴上来,在使用的时候只需要将源码当中的上传地址修改一下即可
function autoupload() {
    var haspicContainer = document.getElementById("has_pic");
    if (haspicContainer == null) {
        haspicContainer = document.createElement("div");
        haspicContainer.id = "has_pic";
        haspicContainer.innerHTML = "<input type=‘text‘ id=‘piclist‘ value=‘‘ style=‘display:none;‘/><div id=‘upload‘><b>您有图片需要上传到服务器</b>&nbsp;&nbsp;<a href=‘javascript:uploadpic();‘ >上传</a></div><div id=‘confirm‘></div>";
        $(".ke-toolbar").after(haspicContainer);
    }

    var img = $(".ke-edit-iframe").contents().find("img");

    var piccount = 0;
    var sstr = "";
    $(img).each(function (i) {
        var that = $(this);
        if (that.attr("src").indexOf("http://") >= 0 || that.attr("src").indexOf("https://") >= 0) {
            piccount++;
            if (i == $(img).length - 1)
                sstr += that.attr("src");
            else
                sstr += that.attr("src") + "|";
        }
    });

    $("#piclist").val(sstr);
    document.getElementById("has_pic").style.display = (piccount > 0) ? "block" : "none";
}

function closeupload() {
    $("#has_pic").hide();
    $("#upload").show();
}

function uploadpic() {
    var piclist = encodeURI($("#piclist").val());
    if (piclist.length == 0) return false;
    $.ajax({
        url: "../../../Portal/KEHandler/autoupload.ashx",
        data: "pic=" + piclist,
        type: "GET",
        beforeSend: function () {
            $("#upload").hide();
            $("#confirm").text("正在上传中...");
        },
        success: function (msg) {
            if (msg !== "") {
                var str = new Array();
                str = msg.split(‘|‘);
                var img = $(".ke-edit-iframe").contents().find("img");

                $(img).each(function (i) {
                    var that = $(this);
                    if (that.attr("src").indexOf("http://") >= 0 || that.attr("src").indexOf("https://") >= 0) {
                        that.attr("src", "../../../KindEditPic/Aimage/" + str[i]);
                        that.attr("data-ke-src", "../../../KindEditPic/Aimage/" + str[i]);
                    }
                });

                $("#confirm").html(img.length + "张图片已经上传成功!&nbsp;&nbsp;<a href=‘javascript:closeupload();‘>关闭</a>");
            }
            else $("#confirm").text("上传失败!");
        }
    });
}

我们来看一下后台代码是怎么处理的?因为我们并不清楚用户到底复制粘贴了多少张,所以处理的时候我们采用循环来处理,

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.IO;
using System.Globalization;
using System.Net;

namespace WeChat.Portal.KEHandler
{
    /// <summary>
    /// autoupload 的摘要说明
    /// </summary>
    public class autoupload : IHttpHandler
    {
        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/plain";
            string pic = context.Request.QueryString["pic"];

            string[] arr = pic.Split(‘|‘);
            string sstr = "";
            UpLoadIMG st = new UpLoadIMG();
            for (int i = 0; i < arr.Length; i++)
            {
                if (arr[i].IndexOf("http://") >= 0 || arr[i].IndexOf("https://") >= 0)
                {
                    string std = st.SaveUrlPics(arr[i], "../../KindEditPic/Aimage/");
                    if (std.Length > 0)
                    {
                        if (i == arr.Length - 1)
                            sstr += std;
                        else
                            sstr += std + "|";
                    }
                }
            }
            context.Response.Write(sstr);
        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }

    public class UpLoadIMG
    {
        public string SaveUrlPics(string imgurlAry, string path)
        {
            string strHTML = "";
            string dirPath = HttpContext.Current.Server.MapPath(path);

            try
            {
                if (!Directory.Exists(dirPath))
                {
                    Directory.CreateDirectory(dirPath);
                }
                string ymd = DateTime.Now.ToString("yyyyMMdd", DateTimeFormatInfo.InvariantInfo);
                dirPath += ymd + "/";
                if (!Directory.Exists(dirPath))
                {
                    Directory.CreateDirectory(dirPath);
                }
                string newFileName = DateTime.Now.ToString("yyyyMMddHHmmss_ffff", DateTimeFormatInfo.InvariantInfo) + imgurlAry.Substring(imgurlAry.LastIndexOf("."));

                WebClient wc = new WebClient();
                wc.DownloadFile(imgurlAry, dirPath + newFileName);
                strHTML = ymd + "/" + newFileName;
            }
            catch (Exception ex)
            {
                //return ex.Message;
            }
            return strHTML;
        }
    }
}

至此我们就全部处理完毕了,不管是复制粘贴的图片还是本地上传的图片全部都可以使用了,最后告诉大家怎么取值怎么复制吧?

取值:

//点击按钮获取富文本的值
 $("#ke-button").on("click", function () {
     //获取富文本输入框的值
     var htmlStr = KindEditor.instances[0].html().trim();
     console.log("未加密:\n" + htmlStr);
     console.log("加密:\n" + escape(htmlStr));
 })

赋值:

KindEditor.instances[0].html("<p style=‘color:red‘>夏守成<p>");

如果大家有任何疑问或者不清楚的地方直接留言或者评论即可!

时间: 2024-10-29 19:09:59

富文本框KindEditor的使用技巧的相关文章

富文本框KindEditor和beautifulsoup4模块

一.富文本框KindEditor 1.官网下载:http://kindeditor.net/down.php 放在项目static/kindeditor/目录下 2.html页面引入kindeditor文件: <script src = "/static/kindeditor/kindeditor-all.js"> </script> <script src="/static/js/jquery-3.2.1.min.js"><

KindEditor富文本框编辑器上传图片功能实现,基于java项目

1. HTML标签与jquery代码 <textarea id="editor_id" style="width: 200px; height: 200px;"></textarea> <script type="text/javascript" src="../js/jquery.min.js"></script> <script type="text/java

kindeditor富文本框,上传文件后,显示文件名称

kindeditor作为一个应用广泛富文本框,我们经常会利用到它,然而在使用的过程中,发现有的地方使用起来很不方便,例如本文要说的,用户上传文件之后,默认只有文件URL,没有文件说明,如图: 点击确定之后,内容中显示的只是一串很长的地址,这并不是我们想要的. 更多的时候,我们只是希望它这里能默认显示文件名称,只有在文件说明里,填写了文件名称,在内容里面才会以名称的形式呈现.这个时候,我们就要给它做个小手术,来完善它,下面贴出代码: 1.修改asp.net/upload_json.ashx文件,大

使用kindeditor获取不到富文本框中的值

获取不到富文本框中的值,网上一搜一堆,但最终没有几个能解决问题的,折腾一番最终解决.注意就是红色代码,加上之后就可以解决问题了. KindEditor.ready(function (K) { var editor1 = K.create('#AContents', { cssPath: '/Content/kindeditor/plugins/code/prettify.css', uploadJson: '/Content/kindeditor/asp.net/upload_json.ash

富文本编辑器KindEditor的使用

       富文本编辑器KindEditor,是一种可内嵌于浏览器,所见即所得的文本编辑器.它是一种解决可一般的用户不同html等网页标记但是需要在网页上设置字体的颜色.大小.样式等信息问题一个文本编辑器 第一步 引入三个文件(一个css,两个js) 第二步 创建textarea控件 第三步 创建初始化方法createEditor (1) (2)select代表textarea对象,return返回一个富文本编辑对象,也就是(1)中的itemAddEditor (3) 至此初始化完成 当需要提

selenium处理富文本框,日历控件等 调用JS修改value值

http://blog.csdn.net/fudax/article/details/8089404 document.getElementById("js_domestic_fromdate").value = "2014-10-10" selenium处理富文本框,日历控件等 调用JS修改value值,布布扣,bubuko.com

[布局]记录部件字段富文本框如何设置统一高度

在使用快速开发平台构建业务功能中,往往都会用到记录部件,如何布局各个字段位置使用户一目了然,往往就是我们头大的问题.在一个固定大小的窗体下,各个字段的样式都是系统自动默认的,如下图: 此种布局方式真是惨不忍睹,那么如何布局多个富文本字段的位置才能使界面简单明了呢?今天为大家带来记录部件中富文本框(数据表中字段编辑类型word)的布局方法:首先在 空白区域鼠标右键唤出菜单[定制版面],单击进入[记录部件布局定制]模式: 选中富文本字段,鼠标右键点击[创建群组]: 群组创建完成,在顶部空白区域右键唤

轻量级web富文本框——wangEditor使用手册(2)——扩展一个“缩进”功能

1. 引言 上一节<轻量级web富文本框——wangEditor使用手册(1)——基本应用>中我们讲解了如何应用wangEditor创建最基本的富文本编辑器,本节继续讲如何扩展一个简单的按钮.本节是继续上一节的内容来的,所使用的代码也是接着上一节的来的,错过的朋友请先看上一节,再看本节. 下载地址:https://github.com/wangfupeng1988/wangEditor demo演示:http://www.cnblogs.com/wangfupeng1988/p/4185508

基于bootstrap的富文本框——wangEditor【欢迎加入开发】

先来一张效果图: 01. 引言 老早就开始研究富文本框的东西,在写完<深入理解javascript原型与闭包>之后,就想着要去做一个富文本框的插件的例子. 现在网络上开源的富文本框插件非常多,一搜索一大堆,但是基于bootstrap的还不多,现在只有一个“bootstrap-wysiwyg”,老外写的,没有一个汉字,大家可以fork一下源码看看,写的非常简洁,压缩之后不到10KB,非常厉害!我也还没来得及研究,一定要看一下. 02. wangEditor 老外的东西,满地英文,给程序猿用着还可