广告
返回顶部
首页 > 资讯 > 前端开发 > node.js >JavaScript中怎么实现富文本编辑器
  • 908
分享到

JavaScript中怎么实现富文本编辑器

2024-04-02 19:04:59 908人浏览 薄情痞子
摘要

javascript中怎么实现富文本编辑器,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Document.execCommand()先从最简单

javascript中怎么实现富文本编辑器,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

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 中的每个子对象都保存了一个按钮的属性。

JavaScript中怎么实现富文本编辑器

部分代码:

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')      },      // &hellip;  }

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

  • icon: 如何在工具栏中显示

  • title: 就是 title 啦

  • result: 一个函数,会赋给按钮作为点击事件,调用之前所提到的 exec() 函数来对文本进行操作

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

// pell.js 中的 init() 函数  settings.actions.forEach(action => {      // 新建一个按钮元素      const button = document.createElement('button')      // 给按钮加上 CSS 样式      button.className = settings.classes.button      // 把 icon 属性作为内容显示出来      button.innerhtml = action.icon      button.title = action.title      // 把 result 属性赋给按钮作为点击事件      button.onclick = action.result      // 将创建的按钮添加到工具栏上      actionbar.appendChild(button)  })

这样数组中的每个元素就都生成了一个工具栏上的按钮了。

init() 初始化函数

想使用 pell 编辑器时,只要调用 init() 函数来初始化一个编辑器即可。它接收一个 setting 对象作为参数,其中包含这样的一些属性:

  • element: 编辑器的 DOM 元素

  • styleWithCSS: 设置为 true 时,将会用 代替

  • actions

  • onChange

其中最重要的是 actions,它是一个数组,包含了你想在工具栏显示的按钮列表。

actions 数组中可以有这几种元素:

  • 一个字符串

  • 一个有 name 属性的对象

  • 一个对象,没有 name 属性,但有生成一个按钮的必需属性 icon,result 等

在 init() 函数中会把这个 actions参数 和 pell.js 中定义的 actions对象组合起来,可以将 actions 对象当作一个默认设置,看以下代码:

actions: [    'bold',    'underline',    'italic',    {      name: 'image',      result: () => {        const url = window.prompt('Enter the image URL')        if (url) window.pell.exec('insertImage', ensureHttp(url))      }    },    // ...  ]

如果参数对象 setting 中不包含 actions 数组, 则会默认使用之前定义的 actions 对象来初始化。

init() 函数里还有一个重要的部分,就是创建一个可编辑区域,这里创建了一个 div 元素,将其 contentEditable 属性设为 true,从而可以在这里使用之前提到的 document.execCommand() 命令了。

// 创建编辑区域的元素  settings.element.content = document.createElement('div')  // 让 div 成为可编辑状态  settings.element.content.contentEditable = true  settings.element.content.className = settings.classes.content  // 当用户输入时,更新页面的相应部分  settings.element.content.oninput = event =>      settings.onChange(event.target.innerHTML)  settings.element.content.onkeydown = preventTab  settings.element.appendChild(settings.element.content)

流程整理

***以“插入链接”为例来梳理下整个编辑器的流程:

一、在调用 init() 函数时,在参数对象的 action 数组中加入以下一项

{      name: 'link',      result: () => {          const url = window.prompt('Enter the link URL')          if (url) window.pell.exec('createLink', ensureHTTP(url))      }  }

二、在 init() 的运行过程中,会检查已定义的 actions 对象中是否有 link 这个属性。经检查属性确实存在

link: {      icon: '?',      title: 'Link',      result: () => {          const url = window.prompt('Enter the link URL')          if (url) exec('createLink', url)      }  }

因为传入的参数中有 result 这一项,所以用传入的 result 来代替 link 对象中的默认值,然后将修改过的 link 对象放入 settings.actions 数组中。

看完上述内容,你们掌握JavaScript中怎么实现富文本编辑器的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注编程网node.js频道,感谢各位的阅读!

--结束END--

本文标题: JavaScript中怎么实现富文本编辑器

本文链接: https://www.lsjlt.com/news/77719.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • JavaScript中怎么实现富文本编辑器
    JavaScript中怎么实现富文本编辑器,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Document.execCommand()先从最简单...
    99+
    2022-10-19
  • JavaScript如何实现富文本编辑器
    这篇文章主要介绍JavaScript如何实现富文本编辑器,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!前段时间在寻找一些关于富文本编辑器的资料,然后发现了这个名为 Pell 的项目,...
    99+
    2022-10-19
  • ASP.NET MVC怎么实现layui富文本编辑器应用
    这篇文章主要讲解了“ASP.NET MVC怎么实现layui富文本编辑器应用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“ASP.NET MVC怎么实现la...
    99+
    2022-10-19
  • Android实现EditText的富文本编辑
    前言本文是我之前写的这篇文章《Android图文混排-实现EditText图文混合插入上传》的升级版,除了在EditText实现了图片上传之外,还包含了视频上传、云盘文件上传、录音上传以及显示上传进度。目前应用于蜜蜂-集结号-任务模块。首先...
    99+
    2023-05-30
    android edittext 富文本编辑
  • Vue怎么整合富文本编辑器TinyMce
    本篇内容主要讲解“Vue怎么整合富文本编辑器TinyMce”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Vue怎么整合富文本编辑器TinyMce”吧!选择一个合适的富文本编辑器对于一个前端项目至...
    99+
    2023-07-04
  • ASP.NET MVC如何实现layui富文本编辑器
    这篇“ASP.NET MVC如何实现layui富文本编辑器”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一...
    99+
    2022-10-19
  • 微信小程序中富文本编辑器的实现
    小程序也是有富文本编辑器这个控件的,别说,之前我还真没注意。 官方文档 官方文档中给出的东西倒是不多,具体的代码示例在下图红框中标注的位置: 示例代码大概是这个样子: 通过官方的...
    99+
    2022-11-13
  • ueditor富文本编辑器怎么实现跨域上传图片
    这篇文章主要介绍了ueditor富文本编辑器怎么实现跨域上传图片,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。 在使用百度富文本编辑器上传...
    99+
    2022-10-19
  • 微信小程序中富文本编辑器如何实现
    本文小编为大家详细介绍“微信小程序中富文本编辑器如何实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“微信小程序中富文本编辑器如何实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。示例代码大概是这个样子:通过官...
    99+
    2023-07-02
  • 怎么使用Rust+React创建富文本编辑器
    这篇文章主要介绍“怎么使用Rust+React创建富文本编辑器”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“怎么使用Rust+React创建富文本编辑器”文章能帮助大家解决问题。数据模型我们的产品是...
    99+
    2023-07-02
  • jquery怎么获取富文本编辑器的内容
    今天小编给大家分享一下jquery怎么获取富文本编辑器的内容的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。具体步骤如下:首先...
    99+
    2023-06-05
  • Django集成富文本编辑器summernote的实现步骤
    目录第一步 安装django-summernote第二步 使用django-summernote第三步 测试效果第四步 常规配置提到Django的富文本编辑器,大家一定会想...
    99+
    2022-11-12
  • javascript 文本编辑器实现代码
    写一篇1800个字以上的中文文章,标题如下:JavaScript 文本编辑器实现代码JavaScript 是一种广泛应用于 Web 开发中的脚本语言,其最大的优点是可以在不重新加载整个页面的情况下,使得页面上某一部分动态地变化。文本编辑器则...
    99+
    2023-05-17
  • Vue2.0中如何集成UEditor富文本编辑器
    小编给大家分享一下Vue2.0中如何集成UEditor富文本编辑器,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!首先,去官网上下...
    99+
    2022-10-19
  • Vue中如何使用tiptap富文本编辑器
    Vue中如何使用tiptap富文本编辑器,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。为什么使用tiptap?市面上有不少富文...
    99+
    2022-10-19
  • Vue.js中如何使用Ueditor富文本编辑器
    这篇文章将为大家详细讲解有关Vue.js中如何使用Ueditor富文本编辑器,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1. 总体思路1.1 模块化vue...
    99+
    2022-10-19
  • 五种JavaScript富文本编辑器,总有一款适合你
    也许,你时常会遇到要开发基于Web的文本编辑器的情况。有时候,只需实现一个简约且轻量级的应用程序,不必有其他任何不必要的功能。而有时候,你的首要任务是保护用户的商业机密。在这样的情况下,如果想知道“背后发生了什么”,最好是从头开始创建应用程...
    99+
    2023-06-03
  • javascript怎么实现富文本框选中对齐
    本篇内容介绍了“javascript怎么实现富文本框选中对齐”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!需求:一个可编辑(contente...
    99+
    2023-06-29
  • layui富文本编辑器前端无法取值怎么办
    这篇文章主要为大家展示了“layui富文本编辑器前端无法取值怎么办”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“layui富文本编辑器前端无法取值怎么办”这篇文...
    99+
    2022-10-19
  • 微信小程序实战项目之富文本编辑器实现
    目录前言1. 实现效果2. 创建发布页面,实现基本布局3. 实现编辑区操作栏的功能3.1. 实现文本加粗、斜体、文本下划线、左对齐、居中对齐、右对齐3.2. 实现撤销、恢复、插入图片...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作