当前位置: 首页 > 编程日记 > 正文

Kindeditor学习中的那些坑

Kindeditor富文本编辑器还算比较好上手的一款插件吧,下面记录一下我在学习和实践中遇到的那些坑。

编辑器初始化方法和参数网上一搜一大把,不想搜的点这里,文档上各个参数已经写得很清楚了,直接拿过来用就OK

开始说一些实际用到时的一些需求。

1、插入链接时增加链接标题的输入框

初始化的Kindeditor插入链接时是这样的

只能输入链接地址,不能输入链接文字,其实Kindeditor默认做法是,如果你在编辑其中没有选中内容,他就默认把链接地址设为链接文本,有选中的内容则自动提取选中内容为链接文本,其实这样做也是挺方便的,可是不是所有的用户都很聪明,根据产品经理的意思,为了获取更好的用户体验,必须要在弹出框中让用户自己填写链接文本,好吧,我改!

然后开始了各种摆渡,终于找到了一遍文章。具体操作方法如下:

修改方法如下:
第一步:修改lang/zh-cn.js,大约114行处增加
'link.linkTitle' : '链接标题',
第二步:修改plugins/link/link.js,增加红色处内容:
第1处:
html = '<div style="padding:20px;">' +
//title'<div class="ke-dialog-row">' +
'<label for="keTitle" style="width:60px;">' + lang.linkTitle + '</lable>' +'<input class="ke-input-text" type="text" id="keTitle" name="title" value="" style="width:260px;" /></div>' +
//url第2处:
yesBtn: {name: self.lang('yes'),click: function (e) {var title = K.trim(titleBox.val());var url = K.trim(urlBox.val());if (url == 'http://' || K.invalidUrl(url)) {alert(self.lang('invalidUrl'));urlBox[0].focus();return;}self.exec('createlink', title, url, typeBox.val()).hideDialog().focus();}}
第3处:
div = dialog.div,
titleBox = K('input[name="title"]', div),
urlBox = K('input[name="url"]', div),
第4处:
if (a) {self.cmd.range.selectNode(a[0]);self.cmd.select();titleBox.val(a.attr('title'));urlBox.val(a.attr('data-ke-src'));typeBox.val(a.attr('target'));
}
第三步:修改kindeditor.js
第1处:
找到 createlink: function (title, url, type) { //其中title参数是另加的
第2处:
var html = '<a href="' + _escape(url) + '" data-ke-src="' + _escape(url) + '" title="' + _escape(title) + '"';
第3处:
if (range.collapsed) {html += '>' + _escape(title) + '</a>'; // 原先是_escape(url)return self.inserthtml(html);
}
第4处:
K('a[href="__kindeditor_temp_url__"]', doc).each(function () {K(this).attr('href', url).attr('data-ke-src', url).attr('title', title); //增加处if (type) {K(this).attr('target', type);} else {K(this).removeAttr('target');}});到此完成

修改过后是这样的

原文地址

ok,完美,到此修改完成,但是要注意的是如果你页面引用的是压缩后的js文件,那么你就必须重新压缩一下修改过的all.js替换一下就ok了。

2、设置宽度width好像不好使(反正我没弄出好的来)

一开始查文档,文档上写的很清楚

可是,我整半天都没整出来,然后又去翻看文档了,有重大发现

哈哈,自己都想打自己了,看来还是要好好看文档,这家伙藏太深一时没注意,修改了minWidth之后就ok了。

3、应产品经理要求,页面编辑器不要出现滚动条

想让编辑器横向不出现滚动条可以,so easy,文章中有参数可以设置

把resizeType:0或者1都可以实现,竖向滚动条这么弄,添加autoHeightMode这个参数,并设置为true就ok了。

4、限制编辑器内图片的显示大小

由于业务需要,用户上传的图片宽度可能会大过编辑器的宽度,可是想要图片在编辑器中显示的宽度不能超过编辑器的宽度,怎么整?再次研究文档发现cssData这个参数可以设置编辑器内文档页面的样式,哦哦,瞬间有想法了

那我只要只设置编辑器整个文档内图片的最大宽度就ok了

5、无法设置编辑器内默认提示文字

怎么办,怎么办,自己加吧。

最先初始化时不能再afterCreate这个回调函数中设置,必须在  window.onload方法中设置,整理之后的完整代码如下:

  KindEditor.ready(function (K) {window.editor = K.create('#editor_id', {width: '432px',minWidth: '100',minHeight: '200', items: ['fontsize', 'forecolor', 'bold', 'italic', 'underline', 'image', 'link', 'unlink'], newlineTag: "br"//换行符, pasteType: 1//纯文本粘贴, resizeType: 0, fixToolBar: true, fillDescAfterUploadImage: false, uploadJson: "UserUploadImg.aspx?uploadimg=yes", allowImageRemote: false, afterUpload: function (url) {if (editor.html() == "在此编辑文章内容") {editor.html("");}}, afterBlur: function () {blurfunction();if (editor.html().length == 0) {window.editor.html("在此编辑文章内容");}}, afterFocus: function () {if (editor.html() == "在此编辑文章内容") {editor.html("");}}, autoHeightMode: true //启用编辑区自动高度, cssData: "body img{ max-width:400px}"});});window.onload = function () {window.editor.html("在此编辑文章内容");}

 6、编辑器获取焦点或者添加图片,粘贴时总是返回顶部

其实发生这个错误是应为 newlineTag: "br" 这个参数,不知道什么原因插件没有处理好,好吧自己改吧

 1  pos: function () {
 2             var self = this, node = self[0], x = 0, y = 0;
 3             if (node) {
 4                 if (node.getBoundingClientRect) {
 5                     var box = node.getBoundingClientRect(),
 6                         pos = _getScrollPos(self.doc);
 7                     x = box.left + pos.x;
 8                     //y = box.top + pos.y;
 9                     y = (parseInt(box.top) < 0 ? 0 : box.top) + pos.y;
10                 } else {
11                     while (node) {
12                         x += node.offsetLeft;
13                         y += node.offsetTop;
14                         node = node.offsetParent;
15                     }
16                 }
17             }
18             return { x: _round(x), y: _round(y) };
19         }

在all.js文件中找到并替换就ok了。

转载于:https://www.cnblogs.com/zhhwDavidblog/p/7560637.html

相关文章:

java2实用教程--第二章基本数据类型与数组

基本数据类型--浮点类型 public class Example2_1 {public static void main (String args[]) {char chinaWord 好,japenWord あ;char you \u4F60;int position 20320;System.out.println("汉字&#xff1a;"chinaWord"的位置&#xff1a;"(int)china…

EntityCURD操作的参数和返回值

以下是netbeans根据实体自动生成的CURD模板&#xff1a;/** To change this template, choose Tools | Templates* and open the template in the editor.*/package com.medea.order.session;import com.medea.order.entity.Storeorder;import java.util.List; import javax.ej…

[ZT]SQL Server 的事务日志意外增大或充满的处理方法

http://support.microsoft.com/kb/317375 事务日志文件Transaction Log File是用来记录数据库更新情况的文件&#xff0c;扩展名为ldf。在 SQL Server 7.0 和 SQL Server 2000 中&#xff0c;如果设置了自动增长功能&#xff0c;事务日志文件将会自动扩展。一般情况下&#xff…

powershell真香

写毕设开题报告&#xff0c;从PDF复制后会有多余空格&#xff0c;一个一个手动删除略显麻烦。 delete.cpp#include<iostream> #include<cstdio> #include<string> #include<vector> using namespace std; int main() {//freopen("UAS.txt",&…

背包的硬币问题

在一个国家仅有1分&#xff0c;2分&#xff0c;3分硬币&#xff0c;将钱N兑换成硬币有很多种兑法。请你编程序计算出共有多少种兑法。 HDU 1284 #include <iostream> using namespace std;const int M 32768 10;int dp[M];int main() {int n;while (~scanf("%d&q…

【转帖】OnPreRender Render的区别

转自&#xff1a;http://hi.baidu.com/trip008/blog/item/d6139ab77b5414f130add1e9.html protected override void OnPreRender(EventArgs e) protected override void Render(HtmlTextWriter writer) 这两个的区别。可否告知 asp.net页面在触发各个子控件的事件之后&#…

微信小程序如何进行登录授权和获取用户信息

微信小程序如何进行登录授权和获取用户信息

禁止windows系统的自动运行功能

禁用Windows 系统的自动播放功能的方法&#xff1a;在运行中输入 gpedit.msc 后回车&#xff0c;打开组策略编辑器&#xff0c;依次点击&#xff1a;计算机配置&#xff0d;&#xff1e;管理模板&#xff0d;&#xff1e;系统&#xff0d;&#xff1e;关闭自动播放&#xff0d;…

WCF配置文件全攻略

Code<?xml version"1.0" encoding"utf-8" ?><configuration> <system.ServiceModel> <!-- services 元素包含应用中驻留的所有service的配置要求 --> <services> <!-- 每个服务的…

图的算法专题——最小生成树

概要&#xff1a; Prim算法Kruskal算法1、Prim算法 算法流程&#xff1a; &#xff08;1&#xff09;对图G&#xff08;V,E&#xff09;设置集合S来存放已被并入的顶点&#xff0c;然后执行n次&#xff08;2&#xff09;&#xff08;3&#xff09; &#xff08;2&#xff09;每…

GridControl摘录

gvCabTotalInfo.Columns["出线平均<br>电压"].SummaryItem.SummaryType DevExpress.Data.SummaryItemType.Average; gvCabTotalInfo.Columns["出线平均<br>电压"].SummaryItem.DisplayFormat "平均:{0:N2}"; gvCabTotalInfo.Refre…

小程序将form表单数据写入云数据库

小程序将form表单数据写入云数据库 <!--pages/MyIncome/MyIncome.wxml--> <view classforms><form bindsubmitgetForm><view classgetform><view>用戶名:<input typetext nameusername placeholder請輸入用戶名/></view><view&g…

ASP.NET自定义控件组件开发 第四章 组合控件开发CompositeControl

第四章 组合控件开发CompositeControl 大家好&#xff0c;今天我们来实现一个自定义的控件&#xff0c;之前我们已经知道了&#xff0c;要开发自定义的控件一般继承三个基 类:Control,WebControl&#xff0c;还有一个就是今天要说的CompositeControl。系列文章链接:ASP.NET自…

[C++对象模型][6]sizeof与对象内存布局

有了前面几节的铺垫&#xff0c;本节开始摸索C的对象的内存布局&#xff0c;平台为windows32位VS2008。 一 内置类型的size 内置类型&#xff0c;直接上代码&#xff0c;帮助大家加深记忆&#xff1a; Codevoid TestBasicSizeOf() { cout << __FUNCTION__ << e…

Linux负载均衡实现

配置之前清空所有服务器防火墙规则iptables -F关闭selinux&#xff1a;1、/usr/sbin/sestatus -v ##如果SELinux status参数为enabled即为开启状态SELinux status: enabled2、getenforce ##也可以用这个命令检查关闭SELinux&#xff1a;1…

【bzoj2770】YY的Treap 权值线段树

题目描述 志向远大的YY小朋友在学完快速排序之后决定学习平衡树&#xff0c;左思右想再加上SY的教唆&#xff0c;YY决定学习Treap。友爱教教父SY如砍瓜切菜般教会了YY小朋友Treap&#xff08;一种平衡树&#xff0c;通过对每个节点随机分配一个priority&#xff0c;同时保证这棵…

第二章 数据类型、运算符与表达式

#include <stdio.h> #include <stdlib.h>int Add(int a,int b) {return ab; }int main() {int x,y,sum 0;printf("Input two integers:\n");scanf("%d%d",&x,&y);sum Add(x,y);printf("sum %d\n",sum);return 0; }计算圆…

从设计原则谈软件开发(二)

最近一直在一个培训公司做着极为无聊的培训&#xff0c;所以一直都没有时间上网。今天突然发现这里可以上无线&#xff0c;嘿嘿&#xff0c;就上来继续把这个文章完成。 上次说到了设计原则中的单一职责原则&#xff0c;今天时间比较紧&#xff0c;我就继续往下写&#xff0c;也…

Npm环境依赖重置

需要彻底删除node_modules 然后npm install 如果无法删除node_modules文件&#xff0c;可以试试这个&#xff1a; 安装RimRaf&#xff1a; npm install rimraf -g 并在项目文件夹中删除node_modules文件夹&#xff1a; rimraf node_modules 然后你可以去npm install转载于:http…

MySQL的information_schema

在一次清空一张比较大的表时&#xff08;在清空前占用400多兆&#xff09;&#xff0c;发现该表中记录为0条但是空间并没有被释放&#xff0c;采用下面方式可查看占用情况 -- 查询各个数据库占用磁盘的情况 select TABLE_SCHEMA, concat(truncate(sum(data_length)/1024/1024,2…

编写spring应用

测试类自动注入失败&#xff1a;RunWith(SpringRunner.class)详解 CtrlAltDelete键&#xff0c;打开任务管理器&#xff0c;结束占据8080端口的Tomcat进程。 HomeController.java <!DOCTYPE html> <html xmlns"http://www.w3.org/1999/xhtml"xmlns:th&quo…

[导入]Learning.ASP.NET 2.0.with.AJAX.pdf(14.14 MB)

ASP.NET 2.0的AJAX无疑是最快&#xff0c;最有效&#xff0c;最可靠和最佳的方式支持创建交互式Web应用程序上市。结合开发工具&#xff0c;可以从Microsoft &#xff0c;免费和商业&#xff0c;这是难以置信轻松地创建网站&#xff0c;看看伟大的表现良好。最重要的是&#xf…

c# IO线程 打造 定时打开指定程序

用IO以及线程轻松实现 定时器 &#xff0c;在指定的时间打开指定的程序&#xff1a;&#xff09; 首先是如何实现定时&#xff1f;这可以单独的用个线程&#xff0c;在时间到的时候打开程序 然后是如何打开程序 &#xff0c;用Process.Start就可以了 最后就是如何把程序列表保存…

Python操作 RabbitMQ、Redis、Memcache、SQLAlchemy

Memcached Memcached 是一个高性能的分布式内存对象缓存系统&#xff0c;用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数&#xff0c;从而提高动态、数据库驱动网站的速度。Memcached基于一个存储键/值对的hashmap。其守护进程&#xf…

jQuery中的常用内容总结(一)

jQuery中的常用内容总结(一) 前言 不好意思(✿◠‿◠)&#xff0c;由于回家看病以及处理一些其它事情耽搁了&#xff0c;不然这篇博客本该上上周或者上周写的&#xff1b;同时闲谈几句&#xff1a;在这里建议各位开发的童鞋&#xff0c;如果有疾病尽快治疗&#xff0c;不要拖&a…

你需要眼光和资格

机上遇到一男人&#xff0c;操北京口音&#xff0c;三十二三&#xff0c;婚否不详&#xff0c;容貌体面。 优势&#xff1a;技术好&#xff0c;聪明&#xff0c;没坏心&#xff0c;乐观 劣势&#xff1a;有点懒&#xff0c;自傲&#xff0c;责任心与意志力指数一般 其所谓“恰当…

嵌入式系统基础了解

1.一个启动 .s文件&#xff08;start.s&#xff09;&#xff0c;至少需要包含三个段: ;//堆栈段 ; //中断向量表 ; //代码段 参考代码&#xff1a; stack_size EQU 0x200 ;…

BFD与IGP快速收敛应用测试

cqmmx&#xff0c;2008-9-10 1、背景介绍 目前对网络稳定性影响较大的一般是链路中断、节点失效等故障&#xff0c;而常规的慢Hello机制检测耗时较长&#xff0c;且常用IGP&#xff08;ISIS和OSPF&#xff09;在默认配置情况下&#xff0c;收敛速度很慢&#xff0c;一般需要几十…

rsa证书ssh登陆服务器

好久不用&#xff0c;又生疏了。 今晚实操了一下&#xff0c;作一个记录。 使用rsa的密钥对登陆linux服务器&#xff0c;主要是为了安全。 这种证书级别的登陆&#xff0c;比最复杂的root用户名和帐号的安全性都要高一个等级。 至少服务器不会被暴破(暴力破解)。 ~~~~~~~~~~~~~…

简单数据结构(队列 栈 树 堆 )

基础知识 基本概念 程序 算法 数据结构数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下&#xff0c;精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。 常见…