首页 > 语言 > JavaScript > 正文

不到200行 JavaScript 代码实现富文本编辑器的方法

2024-05-06 15:22:59
字体:
来源:转载
供稿:网友

前段时间在寻找一些关于富文本编辑器的资料,然后发现了这个名为 Pell 的项目,它是一个所见即所得(WYSIWYG)的文本编辑器,虽然它的功能很简单,但是令人吃惊的是它只有 1kb 大小。而项目最核心的文件 pell.js 只有130行,即使加上其它部分,总的 js 数量也不到200行。这引起了我的兴趣,决定看看它的源码是如何做到这一点的。

项目的主要代码在 pell.js 文件中,其结构很简单,主要功能的实现依赖于以下的几个部分

actions 对象 exec() 函数 init() 函数

Document.execCommand()

先从最简单的部分看起, exec() 函数只有下面三行:

export const exec = (command, value =null) => {  document.execCommand(command, false, value);};

它将 document.execCommand() 进行了一个简单的包装, Document.execCommand() 就是这个编辑器的核心,其语法如下

bool = document.execCommand(aCommandName, aShowDefaultUI, aValueArgument)

aCommandName 是表示想执行的命令的字符串,比如:加粗 ‘bold',创建链接 ‘createLink',改变字体大小 ‘fontSize' 等等 aShowDefaultUI 是否显示默认的用户界面 aValueArgument 有些命令需要额外的输入,如插入图片、链接时需要给出地址

注:经过我的试验,在 Chrome 下改变 aShowDefaultUI 的值并未发现影响, 这个stackoverflow 的问题 中提到这是一个来自于旧版 IE 的参数,所以这里设置为默认的 false 即可。

actions 对象

文件中定义了一个名为 actions 的对象,对应的是下图工具栏上的这一行按钮, actions 中的每个子对象都保存了一个按钮的属性。

部分代码:

const actions = {  bold: {    icon: '<b>B</b>',    title: 'Bold',    result: ()=> exec('bold')  },  italic: {    icon: '<i>I</i>',    title: 'Italic',    result: ()=> exec('italic')  },  underline: {    icon: '<u>U</u>',    title: 'Underline',    result: ()=> exec('underline')  },  // …}

这段代码中显示了名为 bold , italic , underline 的三个对象属性,对应于工具栏中前方的 加粗 、 斜体 、下划线按钮,可以看出它们的结构是相同的,都有下列三个属性:

icon : 如何在工具栏中显示 title : 就是 title 啦 result : 一个函数,会赋给按钮作为点击事件,调用之前所提到的 exec() 函数来对文本进行操作

现在已有了 actions 对象,那么如何使用它呢?这就要看看 init() 函数了,它会根据一定的规则从 actions 对象中选出元素组成一个数组,数组的每一项都会生成一个按钮。下面代码中的 settings.actions 即为此数组,其中的每个元素都对应一个显示在工具栏上的按钮。 settings.actions 的生成规则会在后面进行解释。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选