首页 > 其他分享 >可编辑div遇到的那些事

可编辑div遇到的那些事

时间:2024-10-14 16:49:20浏览次数:3  
标签:const dom text 遇到 编辑 div 文本 event 输入

        在日常开发中有时可能会遇到input 或 textarea 不能满足的开发场景,比如多行输入的情况下,textarea 的右下角icon 无法去除, 所以此时可以使用div 设置可编辑状态,完成功能开发,在开发的过程中仍会遇到一下问题。

1,如何设置div使其变成可编辑状态

 通过给div 添加 :contenteditable="true" 可以开启编辑状态,

 2,设置placeholder

 &__text{
        &:empty::before{
          display: inline-block;
          width:100%;
          content: attr(placeholder-pc);
          color: var(--t-font-color-gy3);
          cursor: text;
        }

        &:not(:empty)::before{
          content:none;
        }
      }

 3,粘贴事件

@paste="handlePaste"

 /**
      * 处理粘贴事件
      * @param event 剪贴板事件
      */
    function handlePaste(event: ClipboardEvent) {
      event.preventDefault();
      const clp = event.clipboardData;
      const text = clp?.getData('text/plain') || '';
      if (text !== '') {
        document.execCommand('insertText', false, text);
      }
    }

 4,获取输入文本长度px

/**
 * @description: 计算输入文本所占的px长度
 * @param {*} text 输入的文本
 * @return {*}
 */
export function calculateInputLength(text:string) {
  const dom = document.createElement('div');
  dom.style.position = 'absolute';
  dom.style.visibility = 'hidden';
  dom.style.display = 'inline-block';
  dom.style.width = 'auto';
  dom.style.height = '0px';
  dom.style.fontSize = '14px';
  dom.style.whiteSpace = 'nowrap';
  dom.innerHTML = text;
  document.body.appendChild(dom);
  const testWidth = dom.offsetWidth;
  document.body.removeChild(dom);
  return testWidth;
}

 5,输入处理,获取输入的文本内容

 通过 @input 事件绑定输入处理方法
 const handleInput = async (event: InputEvent) => {
      // state.isComposing 用来判断当前是否是中文输入法输入 第7步介绍
      if (state.isComposing || event.data === '') {
      // 如果进行的是中文输入法输入,或者输入的是空格,则不保存输入文本
        return;
      }
      // 添加输入文本长度检测
      // 否则的话可以根据event.target.innerText.trim() 获取输入的文本
      state.messageInfo =  cloneDeep((event?.target as HTMLElement)?.innerText?.trim());
      // 第6部将光标设置到文本末尾
      next(()=>{
           // 将光标设置到文本末尾
      })
}

 6,设置光标位置于内容文本末尾

/**
 * @description: 可编辑多行文本,设置光标聚焦文本末尾
 * @param {HTMLElement} dom 要编辑的dom元素
 * @return {*}
 */
export const setCursorTAtTextEnd = (dom:HTMLElement) => {
  dom?.focus();
  const range = document.createRange();
  const selection = window.getSelection() as any;
  range.selectNodeContents(dom);
  range.collapse(false);
  selection.removeAllRanges();
  selection.addRange(range);
};

 7,中文输入法处理

        通过 @compositionstart="messageInputStart",及@compositiοnend="messageInputEnd" 对中文输入法状态进行处理

/**
     * @description: 键盘中文输入法开始
     * @param {*} event
     * @return {*}
     */
    const messageInputStart = (event:Event) => {
      // 只有中文输入法才会触发
      state.isComposing = true;
    };
 
/**
     * @description: 键盘输入结束
     * @param {*} event
     * @return {*}
     */
    const messageInputEnd = (event: CompositionEvent) => {
      // 中文输入法结束
      state.isComposing = false;
      handleInput(event as any);
    };

标签:const,dom,text,遇到,编辑,div,文本,event,输入
From: https://blog.csdn.net/qq_43225508/article/details/142922852

相关文章

  • Linux 之 nano 编辑器
    使用git提交的时候,发生冲突或要记录相关信息时会弹出nano这个编辑器。nano[选项][[+行,列]文件名]...nano[必要参数][选择参数][文件]命令行白的部分是组合键,后面的则是该组合键的功能。指数符号(^)代表的是键盘的[ctrl]按键,(M)表示Alt键。[Ctrl]-G:取得在线帮助(hel......
  • Bison遇到冲突的默认行为&用户自定义优先级
    Bison遇到冲突的默认行为&用户自定义优先级在使用Bison进行语法分析时,如果在语法规则中存在冲突,Bison会根据默认的优先级和结合性规则进行决策,选择某个特定的行为来解决冲突。Bison中常见的冲突主要包括两类:移入-规约冲突(shift-reduceconflict)规约-规约冲突(reduce-reduce......
  • 媲美ps却比ps操作简单--Luminar Neo macOS照片编辑激活版
    LuminarNeo是一款由Skylum公司开发的先进照片编辑软件,融合了人工智能技术,旨在为摄影师和图像处理爱好者提供创新、简便的编辑体验。它支持Windows和macOS系统,具备AI驱动的编辑工具,能够轻松完成从基础调整到复杂修饰的各种任务。同时,其模块化的界面和灵活的工作流程,使用户能够根......
  • Codeforces Round 978 (Div. 2) A-D1 题解
    我的同学还在VP,排名马上放声明:不要觉得有subtask的题目只做Easyversion没有意义,从这里也能捞很多分,况且有的时候并不是简单和难的区别,而是考不同的算法A.BustoPénjamo题意有一辆车上面有$r$排座位,每排有$2$个座位,现在共$n$个家庭出行坐公交车,每个家庭$a_i$......
  • 公司的网站如何编辑
    编辑公司网站通常涉及以下几个步骤:确定需求:首先明确网站需要实现的功能和展示的内容,比如产品介绍、新闻动态、联系方式等。选择工具或平台:根据需求选择合适的网站建设工具或平台,如WordPress、Wix、Squarespace等,这些平台提供了丰富的模板和插件来帮助快速搭建网站。设计......
  • codeforces round 977 (div.2) C2(访问set的第一个元素,观察数据规律-出现次序,用set记
    解题历程:我首先想到的是等效法,每一次操作可以等效为每次将第一个人抽出放入一组,后面的人往前移,而该组的人就是可以任意放置的人,当b中后面再出现与前一个相同的人时,就不进行操作,当b中出现不同的人时,就看看这组中有没有这个人,有的话就下一个循环,没有的话就看看这个新的人是否按a中......
  • Codeforces Round 899 (Div. 2)题解记录
    题目链接:https://codeforces.com/contest/1882A.IncreasingSequence从1开始慢慢和\(a[i]\)的所有值比较,注意最后一个位置特判下#include<iostream>#include<string.h>#include<map>#include<vector>#include<set>#include<unordered_set>#include<......
  • 请问自己的网站怎么编辑
    编辑自己的网站通常涉及以下几个步骤:选择编辑工具:你可以使用文本编辑器(如VSCode,SublimeText)来编写或修改HTML,CSS和JavaScript文件。如果你不熟悉编程,也可以考虑使用可视化编辑工具或者网站构建平台(如WordPress,Wix,Squido)。获取网站源文件:如果你已经有网站运行中,可......
  • 将threejs的官方文档部署到本地,遇到的问题及解决方法
    问题:官方文档浏览速度慢。 1.下载https://threejs.org/官网首页左侧,点击“download”下载  2.得到压缩包:three.js-master.zip解压到本地 3. 部署用VSCode打开解压后的文件夹运行命令:npminstall运行命令:npmrundev  报错:  问了一下AI,得到如何解......
  • 记录工作开发日常遇到的问题点-css字体
    data.forEach((item,index)=>{style+=@font-face{font-family:'FileType${index}';src:url('${item.FileUrl}')format('truetype');}ht+=`});$('head').append($('<style>&......