原生API编写简单富文本编辑器002

news2024/11/15 19:52:48

原生API编写简单富文本编辑器002

1. 为功能按钮添加点击事件

我们在index.js 中为所有功能按钮添加点击事件监听,在点击对应按钮时执行相应的原生命令。

window.onload= function() {
    const btns = document.getElementById('editorBar').getElementsByTagName('li');
    for (let i=0; i<btns.length; i++) {
        const btn = btns[i];
        const command = btn.getAttribute('command');
        btn.onclick= function() {
            document.execCommand(command, false, '');
        };
    }
};

然后我们回到页面中进行点击,会发现除了重做和撤销,其它按钮都不起作用,哪怕我们在可编辑区域输入文字,选择一段文字,然后点击按钮,也是没有任何效果。(可在1.0.2分支复现)

原因是:

document.execCommand 命令只有使用button元素触发才能生效。

2. 改造HTML

所以,我们改造一下HTML,将按钮全部改为button元素:

<!--> index.html <-->

<ul>
    <li><button command="undo"><i class="iconfont icon-chexiao" title="撤销"></i></button></li>
    <li><button command="redo"><i class="iconfont icon-zhongzuo" title="重做"></i></button></li>
    <li><button command="copy"><i class="iconfont icon-fuzhi" title="复制"></i></button></li>
    <li><button command="cut"><i class="iconfont icon-jianqie" title="剪切"></i></button></li>
    <li><button command="fontName"><i class="iconfont icon-ziti" title="字体"></i></button></li>
    <li><button command="fontSize"><i class="iconfont icon-zihao" title="字号"></i></button></li>
    <li><button command="bold"><i class="iconfont icon-zitijiacu" title="加粗"></i></button></li>
    <li><button command="italic"><i class="iconfont icon-zitixieti" title="斜体"></i></button></li>
    <li><button command="underline"><i class="iconfont icon-zitixiahuaxian" title="下划线"></i></button></li>
                    <li><button command="strikeThrough"><i class="iconfont icon-zitishanchuxian" title="删除线"></i></button></li>
                    <li><button command="superscript"><i class="iconfont icon-zitishangbiao" title="上标"></i></button></li>
                    <li><button command="subscript"><i class="iconfont icon-zitixiabiao" title="下标"></i></button></li>
                    <li><button command="fontColor"><i class="iconfont icon-qianjingse" title="字体颜色"></i></button></li>
                    <li><button command="backColor"><i class="iconfont icon-zitibeijingse" title="字体背景色"></i></button></li>
                    <li><button command="removeFormat"><i class="iconfont icon-qingchugeshi" title="清除格式"></i></button></li>
                    <li><button command="insertOrderedList"><i class="iconfont icon-youxuliebiao" title="有序列表"></i></button></li>
                    <li><button command="insertUnorderedList"><i class="iconfont icon-wuxuliebiao" title="无序列表"></i></button></li>
                    <li><button command="justifyLeft"><i class="iconfont icon-juzuoduiqi" title="局左对齐"></i></button></li>
                    <li><button command="justifyRight"><i class="iconfont icon-juyouduiqi" title="居右对齐"></i></button></li>
                    <li><button command="justifyCenter"><i class="iconfont icon-juzhongduiqi" title="居中对齐"></i></button></li>
                    <li><button command="justifyFull"><i class="iconfont icon-liangduanduiqi" title="两端对齐"></i></button></li>
                    <li><button command="createLink"><i class="iconfont icon-charulianjie" title="插入链接"></i></button></li>
                    <li><button command="unlink"><i class="iconfont icon-quxiaolianjie" title="取消链接"></i></button></li>
                    <li><button command="indent"><i class="iconfont icon-shouhangsuojin" title="首行缩进"></i></button></li>
                    <li><button command="insertImage"><i class="iconfont icon-tupian" title="插入图片"></i></button></li>
                </ul>

3. 改造CSS

由于将原来的元素上套了一层button元素,所以样式与我们最初设计的有了出入:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TjMJHt42-1670512440938)(https://gitee.com/hjb2722404/tuchuang/raw/master/img/202203111635140.png)]

我们通过为button元素增加CSS规则来修复:

/**index.css **/

.editor-toolbar ul li button {
    background-color: #fff;
    border: none;
    cursor: pointer;
}

4. 改造 JS

我们将点击事件监听加在button上,以代替原来的li上的监听:

// index.js
const btns = document.getElementById('editorBar').getElementsByTagName('button');

然后,我们再在页面可编辑区域输入文本,并点击功能按钮,可以得到以下结果:(可在1.0.3分支上复现)

  • 撤销、重做功能正确;
  • 复制、剪切、粘贴功能正确(其中粘贴时直接使用Ctrl+v
  • 字体、字号、前景色、背景色、插入链接、取消链接按钮点击无反应
  • 加粗、斜体、下划线、删除线、上标、下标、清除格式在有选中文本时执行正确
  • 有序列表、无序列表、左对齐、右对齐、居中对齐、两端对齐 、首行缩进对光标所在行起作用
  • 插入图片点击后会在光标处添加一个空的img标签,表现在页面上是两个空格

在这里插入图片描述

在这里插入图片描述

我们看到,上面的测试结果中,还有很多功能是没有反应的,这是因为这些功能都是需要参数的,我们下一节将实现它们。

本系列文章代码可从gitee获取

本节内容在 1.0.2 分支

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/73624.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

centos7安装xfce桌面后,桌面空白,只有openbox功能,解决办法

因为有openbox和图标桌面 两个模式 在登录时,输入密码,下一步,旁边<齿轮按钮>,选择 图标桌面,再登录 前期centos7安装xfce步骤 yum update yum install epel-release -y yum groupinstall -y “X Window system” yum grouplist //查看是否有xfce yum groupinstall -y …

ClickHouse在自助行为分析场景的实践应用

导读 公司每日产生海量数据&#xff0c;按业务需要进行统计产出各类分析报表&#xff0c;但巨大的数据量加上复杂的数据模型&#xff0c;以及个性化的分析维度&#xff0c;采用传统的离线预计算方式难以灵活支持&#xff0c;为此需引入一种满足实时多维分析场景的计算引擎框架…

Linux基础IO

基础IO&#x1f3de;️1. 系统文件I/O&#x1f4d6;1.1 接口介绍&#x1f4d6;1.2 creat系统调用&#x1f4d6;1.3 理解fd文件描述符&#x1f4d6;1.4 不按顺序的读取和写入&#x1f4d6;1.5 文件重命名&#x1f301;2. 理解Linux下一切皆文件&#x1f320;3. 理解重定向&#…

5G LAN赋能智慧工厂加速落地,四信5G工业路由器成最佳助攻

近年来&#xff0c;随着5G技术的蓬勃发展&#xff0c;信息技术与企业发展更加紧密结合已经成为未来企业发展的主要趋势。而作为“新基建”的代表&#xff0c;5G与工业网络的融合无疑成为未来5G网络的一个重要应用场景。 然而&#xff0c;在传统的工厂制造中&#xff0c;大多数设…

Java基础-面向对象综合练习-拼图游戏

1. 设计游戏的目的 锻炼逻辑思维能力利用Java的图形化界面&#xff0c;写一个项目&#xff0c;知道前面学习的知识点在实际开发中的应用场景 2. 游戏的最终效果呈现 Hello&#xff0c;各位大家好。今天&#xff0c;我们要写一个非常有意思的小游戏 —《拼图小游戏》 我们先来…

ADI Blackfin DSP处理器-BF533的开发详解5:PLL配置内核和系统时钟(含源代码)

又是一个熟悉的名词&#xff0c;PLL。 硬件准备 ADSP-EDU-BF533&#xff1a;BF533开发板 AD-HP530ICE&#xff1a;ADI DSP仿真器 软件准备 Visual DSP软件 硬件链接 功能介绍 PLL(Phase Locked Loop)是 ADSP-BF53x 的内核和时钟设置的机制&#xff0c;叫做锁相环。通过 P…

论文阅读笔记 | 三维目标检测——CenterPoint算法

如有错误&#xff0c;恳请指出。 文章目录0. 前言1. 背景2. 准备工作3. 网络结构3.1 RPN3.2 RCNN4. 实验结果paper&#xff1a;《Center-based 3D Object Detection and Tracking》&#xff08;2021CVPR&#xff09; 0. 前言 CenterPoint应该是与CenterNet是同一个团队的成果…

[附源码]Python计算机毕业设计Django在线项目管理

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

庄懂的TA笔记(十一)< >

庄懂的TA笔记&#xff08;十一&#xff09;&#xff1c; &#xff1e; 目录&#xff1a; 一、shader面板玩法 > 增广 : 多种 面板设计玩法&#xff1a; 二、shader参数类型 > 增广 &#xff1a;认识 多种参数类型 &#xff1a; 三、增广 &#xff1a;认识 IVO …

体验一下传说中可以干掉程序员的OpenAI ChatGPT

ChatGPT初体验 ​ OpenAI公司最近开发了一个新的聊天AI模型&#xff0c;ChatGPT。网上铺天盖地传言AI可以替代程序员。于是今天也来体验了一下。下面是一个使用的案例&#xff1a; ​ 首先看来他也不是万能的。 问&#xff1a; 今年世界杯冠军预测 ChatGPT: 对于世界杯的冠军…

【20221208】【排序专题】

一、冒泡排序&#xff08;稳定排序&#xff09; 思想&#xff1a;冒泡排序的思想就是比较当前数和后一个数的大小&#xff0c;将较大的数往后移动&#xff0c;这样可以确保一轮下来能将最大的数放在数组的最末端。然后重复此操作即可完成排序。 上面第一轮比较完&#xff0c;我…

VSCode无法远程连接VMWare(Ubuntu)其中一个可能原因(inet消失)

有时候把虚拟机挂起后&#xff0c;等自己下次再想用&#xff0c;打开vscode用之前的ssh配置&#xff0c;却始终无法连接&#xff0c;进程sshd也是开启的&#xff0c;就很纳闷。 然后么&#xff0c;咱就想查查是不是网络的问题&#xff0c;毕竟ssh是通过ipv4连的虚拟机&#xff…

【explain执行计划】MySQL性能调优

explain是MySQL性能调优过程中必须掌握的工具&#xff0c;explain结果中常见的type结果及代表的含义&#xff0c;并且通过同一个SQL语句的性能差异&#xff0c;说明建立正确的索引多么重要。 explain结果中的type字段代表什么意思&#xff1f; MySQL的官网解释非常简洁&#x…

前端埋点分析

第三方代码埋点 已经有很多成型的服务商了如友盟&#xff0c;百度统计等&#x1f32f;&#xff0c;都提供了比较成型的方案&#x1f3a8;&#xff0c;并可以在后台管理系统中查看比较详细的数据分析 自己动手 优点&#xff1a; 控制精准&#xff0c;可以非常精确地选择什么时…

Bulma的简单使用

文章目录1. 引入Bulma2. 字体和颜色3. 间距和容器1. 引入Bulma 通过 CDN 引入&#xff1a; <style>import "https://cdnjs.cloudflare.com/ajax/libs/bulma/0.9.4/css/bulma.min.css";</style>官网还有其他多种引入方式。 2. 字体和颜色 在 Bulma 中&…

基于jQuery或Zepto的图片延迟加载插件

当我们网站的页面图片过多时&#xff0c;加载速度就会很慢。尤其是用手机2G/3G访问页面&#xff0c;不仅页面慢&#xff0c;而且还会用掉很多流量。我们主题之前也都采用了图片的懒加载形式&#xff0c;但都不完美&#xff0c;部分主题还采用了占位图片来控制懒加载&#xff0c…

CP2102N高度集成USB全速带电池充电检测控制芯片

目录CP2102N简介主要特点芯片特性CP2102N开发板开发板功能应用领域CP2102N简介 CP2102N是USBXpress系列中新的一款高度集成的USB转RS232的桥接芯片。不但较上一代CP210X系列更有成本效益&#xff0c;而且在功能上也有更多创新。其中&#xff0c;符合USB-BCS 1.2规范的充电器识…

【人脸识别】基于直方梯度图 HDGG 的人脸识别算法研究附matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;修心和技术同步进步&#xff0c;matlab项目目标合作可私信。 &#x1f34e;个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信息&#xff1a;格物致知。 更多Matlab仿真内容点击&#x1f447; 智能优化算…

入门系列 - Git的管理修改与撤销修改

本篇文章&#xff0c;是基于我自用Linux系统中的自定义文件夹“test_rep”&#xff0c;当做示例演示 具体Git仓库的目录在&#xff1a;/usr/local/git/test_rep Git的管理修改与撤销修改 在讲这个之前&#xff0c;还是有必要再阐述一下“工作区和暂存区”。Git 和其它版本控制…

计算机毕业论文java毕业设计选题源代码S2SH校园BBS论坛系统

&#x1f496;&#x1f496;更多项目资源&#xff0c;最下方联系我们✨✨✨✨✨✨ 目录 Java项目介绍 资料获取 Java项目介绍 计算机毕业设计java毕设之S2SH校园论坛_哔哩哔哩_bilibili计算机毕业设计java毕设之S2SH校园论坛共计2条视频&#xff0c;包括&#xff1a;计算机…