css 可编辑,如何设置DIV可编辑

「来源: |web前端开发 ID:web_qdkf」

f613e26c02c9bab993f5bc22693e18c7.png

如何让一个div变成可编辑状态,比如富文本的输入框就可以用可编辑的div(自定义一个富文本时可用),类似textare。

有2种方案可以实现:1是通过contenteditable属性设置为true,2是利用css的user-modify属性。

方案一:contenteditable属性

这里可以编辑

contenteditable 属性是 html5 中的新属性,contenteditable 属性规定元素内容是否可编辑。

注释:如果元素未设置 contenteditable 属性,那么元素会从其父元素继承该属性。

js操作:

监听事件keydown 、textInput 、input

var content = document.getElementById('add-content')//注册中文的输入事件,var isCN = false;content.addEventListener('compositionstart',function(){ isCN = true;});content.addEventListener('compositionend',function(){ isCN = false;})//注册文本输入事件,获取光标的起止偏移数据,如果是非中文以及超出长度的输入,则撤销本次操作var txtAnchorOffset, txtFocusOffset;content.addEventListener("textInput",function(event){var _sel = document.getSelection(); txtAnchorOffset = _sel.anchorOffset; txtFocusOffset = _sel.focusOffset;//必须加上isCN的判断,否则获取不到正确的光标数据if(!isCN && this.textContent.length >= noteMax){ event.preventDefault(); }});//注册粘贴事件,获取粘贴数据的长度var pastedLength; content.addEventListener("paste",function(event){if(!event.clipboardData) return; pastedLength = event.clipboardData.getData('Text').length;});//注册输入事件,对输入的数据进行content.addEventListener("input",function(event){ setTimeout(function(){if(!isCN){var _this = content;if(_this.textContent.length > noteMax){var data = _this.textContent;if(pastedLength > 1){ oldDate = data.slice(0, txtAnchorOffset) + data.slice(txtFocusOffset+pastedLength, data.length);//粘贴字符串长度置为0,以免影响到下一次判断。 pastedLength = 0; } else { oldDate = data.slice(0, txtAnchorOffset) + data.slice(txtFocusOffset, data.length); }//再次截取最大长度字符串,防止溢出 _this.textContent = oldDate.slice(0, noteMax);//光标移动到起始偏移位置document.getSelection().collapse(_this.firstChild, txtAnchorOffset);47 } } }, 0);//content.focus(); });

方案二:css中user-modify属性

这里可以编辑

user-modify属性,用来控制用户能否对页面文本进行编辑。与标签的contentEditable属性类似。语法如下:

user-modify: read-only | read-write | read-write-plaintext-only

参数说明:

a78dc6bbc7cfcaf4238e3176b49b6543.png

学习更多技能

99bc750d99f6e2f7040f6ca522162aeb.png

举报/反馈

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

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

相关文章

Java中的局部变量表及使用jclasslib进行查看

直接上下载地址 jclasslib是一个独立的工具,不是包含在JDK中的工具,需要自己进行下载,下载地址如下: http://downfile.downcc.com/down/JClassLib_windows.zip 什么是局部变量表 在《java中的栈》中我们说到了一个栈帧至少需要包含…

在线学ajax,ajax学习

AJAX:1. 概念: ASynchronous JavaScript And XML异步的JavaScript 和 XML1. 异步和同步:客户端和服务器端相互通信的基础上* 客户端必须等待服务器端的响应。在等待的期间客户端不能做其他操作。* 客户端不需要等待服务器端的响应。在服务器处…

服务器网盘系统怎么装,云服务器上怎么安装操作系统

云服务器上怎么安装操作系统 内容精选换一换安装传输工具在本地主机和Windows云服务器上分别安装数据传输工具,将文件上传到云服务器。例如QQ.exe。在本地主机和Windows云服务器上分别安装数据传输工具,将文件上传到云服务器。例如QQ.exe。本地磁盘映射(…

Ubuntu 16.04 64位安装YouCompleteMe

之前记录在OneNote上感觉有点乱,而且不适合保存shell,这次重新安装又出问题了,干脆写篇博客记录。 从零开始 1、git(用来下载vim和相关插件) sudo apt-get install git2、cmake(用来编译clang-llvm&#xf…

学大数据找IT十八掌

《IT十八掌大数据内功修炼到企业实战2.0课程》免费自学马拉松计划 1、关于十八掌 学了大数据,还是不敢找工作? 内功不够!跟随十八掌掌门徐培成炼内功! 十八掌教育努力打造一套地表最强【大数据云计算】内功修炼系列课程&#xff…

C语言中的小数取整和四舍五入

将小数直接抹掉的取整1自动类型转换 例如 &#xff1a;#include <stdio.h> main() {int a;a2.7;printf("a %d",a); } // a 22强制类型转换例如&#xff1a;#include <stdio.h> main() {printf("%d",(int)3.75); //输出结果为 …

sql exist 优化查询时间

1.非exist&#xff0c;查询需要20多秒 2.使用exist后 3.表连接也能优化 转载于:https://www.cnblogs.com/alamZ/p/6423166.html

LightOJ - 1245 Harmonic Number (II) 求同值区间的和

题目大意&#xff1a;对下列代码进行优化 long long H( int n ) { long long res 0; for( int i 1; i < n; i ) res res n / i; return res;} 题目思路&#xff1a;为了避免超时&#xff0c;要想办法进行优化 以9为例&#xff1a; 9/1 9 9/2 4 9/3 3…

3-5 单链表分段逆转 (20 分)

给定一个带头结点的单链表和一个整数K&#xff0c;要求你将链表中的每K个结点做一次逆转。例如给定单链表 1→2→3→4→5→6 和 K3&#xff0c;你需要将链表改造成 3→2→1→6→5→4&#xff1b;如果 K4&#xff0c;则应该得到 4→3→2→1→5→6。 函数接口定义&#xff1a; v…

studio快捷键

转载于:https://www.cnblogs.com/hoobey/p/6431027.html

7-1 叶节点求和 (30 分)

对给定的有N个节点&#xff08;N>0&#xff09;的二叉树&#xff0c;求叶节点元素之和。 输入格式: 第一行是一个非负整数N&#xff0c;表示有N个节点 第二行是一个整数k&#xff0c;是树根的元素值 接下来有N-1行&#xff0c;每行是一个新节点&#xff0c;格式为 r d e …

Docker的学习笔记(开发的技术分享转发)

我的Docker学习记录一、安装dockeryum install -y docker-io二、使用docker1、下载镜像docker pull <image>2、查询镜像docker search <image> 3、从镜像运行容器docker run -it --name <name> <image> /bin/bash4、后台运行docker run -itd --name &l…

windows资源管理器已停止工作后,使用命令提示窗口拷贝文件和运行exe程序

电脑异常现象&#xff1a; 需要从优盘拷贝NetAssist.exe软件至电脑进行运行&#xff0c;发现双击无法打开我的电脑和文件夹&#xff0c;点击提示的重新启动程序问题后仍存在&#xff0c;重启电脑、关机再开机该问题依然存在。插入优盘后可以识别到&#xff0c;但无法打开优盘&…

DAC8563芯片参考手册重要内容总结

DAC8563的主要参数&#xff1a; 供电电压&#xff1a;2.7~5.5V分辨率&#xff1a;16bit&#xff0c;双通道通讯接口&#xff1a;3线SPI串行通讯&#xff0c;速率最高至50MHz&#xff0c;支持3.3V和5V单片机&#xff08;有MOSI/CLK/CS&#xff0c;无MISO&#xff09;内部自带2.…

20155220 吴思其 2016-2017《java程序设计》第一周总结

对第一章和第二章的学习 通过了前两章的学习&#xff0c;我了解到了java的由来以及JVM/JRE/JDK三大平台 JDK JDK 是 Java 语言的软件开发工具包。 JDK是整个JAVA的核心&#xff0c;包括了Java运行环境&#xff0c;一堆Java工具&#xff08;javac/java/jdb等&#xff09;和Java基…

手把手教你从0创建STM32串口空闲+DMA数据接收工程

串口通讯是嵌入式系统中最常用的通讯方式。 STM32的串口接收普通的方式是在串口读数据寄存器非空RXNE中断&#xff08;Read data register not empty&#xff09;中1个字节1个字节的接收串口数据&#xff0c;一帧数据的接收完成可以使用结束帧判断&#xff0c;也可以使用定时器…

TC214B直流电机控制芯片

潘多拉开发板中通过TC214B电机驱动芯片驱动板载直流电机&#xff0c;因此需要先了解TC214B芯片的主要功能及其使用方法。 通过以上资料可以了解到&#xff0c;MCU控制TC214B从而进行直流电机转动方向&#xff0c;方向控制&#xff08;即前进/后退&#xff09;主要是通过控制MCU…

ST7789V2 LCD驱动芯片

ST7789V2是一个单芯片TFT-LCD驱动器。该芯片可以直接连接到外部MCU&#xff0c;支持并行8080系列的8位/9位/16位/18位接口&#xff0c;也支持SPI串行通讯接口。 显示数据可以存储在240x320x18bits的片上显示数据RAM中。 它可以在没有外部操作时钟的情况下执行显示数据RAM读写操…

STM32 USB虚拟串口原理(上)

USB虚拟串口是使用USB的CDC&#xff08;CDC为communication device class(virtual port com)&#xff09;类实现的一种通讯接口。使用STM32自带的USB slave功能可以在电脑上实现一个USB虚拟串口&#xff0c;在电脑上可以直接使用串口调试助手打开该虚拟串口和STM32进行通讯。ST…

RT-Thread使用ENV生成工程时自己添加的文件被清掉的解决方法

在项目中难得一次就可以将需要的模块或组件包添加完成&#xff0c;因此在实际开发中经常会遇到在未完成的项目中增加软件包或使能硬件功能的情况。一般我们会使用RT-Thread的ENV辅助开发环境的menuconfig图形化系统配置工具对组件包进行配置&#xff0c;配置完后使用pkgs --upd…