【HTML】使用 div 自定义实现 input、textarea 输入框(适合定制化场景)

news2024/11/24 1:25:53

文章目录

    • 一、实现 Input 组件
    • 二、实现 Textarea 组件
    • 三、React 实践案例

API参考文档:

  • contenteditable : https://developer.mozilla.org/zh-CN/docs/Web/HTML/Global_attributes/contenteditable
  • resize :https://developer.mozilla.org/zh-CN/docs/Web/CSS/resize

一、实现 Input 组件

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style>
			div {
				padding: 5px;
				overflow: auto;
				border: 1px solid #d9d9d9;
				outline: 0;
			}

			/* 输入框为空时显示 placeholder */
			div:empty:before {
				content: attr(placeholder);
				color: #bfbfbf;
			}

			/* 输入框获取焦点时移除 placeholder */
			div:focus:before {
				content: none;
			}
		</style>
	</head>
	<body>
		<!-- contenteditable="true" 属性,使 div 元素变成用户可编辑  -->
		<div contenteditable="true" placeholder="请输入内容" onkeydown="myFunction()"></div>
	</body>
	<script type="text/javascript">
		// 禁止回车换行
		function myFunction() {
			if (window.event && window.event.keyCode == 13) {
				window.event.returnValue = false;
			}
		}
	</script>
</html>

在这里插入图片描述

  • 不禁止回车换行就会变成这个样子:

在这里插入图片描述

二、实现 Textarea 组件

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style>
			div {
				resize: both;
				padding: 5px;
				overflow: auto;
				border: 1px solid #d9d9d9;
				height: 100px;
				outline: 0;
			}

			/* 输入框为空时显示 placeholder */
			div:empty:before {
				content: attr(placeholder);
				color: #bfbfbf;
			}

			/* 输入框获取焦点时移除 placeholder */
			div:focus:before {
				content: none;
			}
		</style>
	</head>
	<body>
		<!-- contenteditable="true" 属性,使 div 元素变成用户可编辑  -->
		<div contenteditable="true" placeholder="请输入内容"></div>
	</body>
	<script type="text/javascript">
	</script>
</html>

在这里插入图片描述
在这里插入图片描述

三、React 实践案例

react 使 多行文本输入框 里面的原有文案,与生成后的推理文案,用颜色区分开来

  • 效果图:

在这里插入图片描述

  • 代码实现:

import { Button } from 'antd';
import {  useState } from 'react';

export default function ({ dataset }) {
  const [textArea, setTextArea] = useState('');
  const [textAreaDiv, setTextAreaDiv] = useState('');
  const [loading, setLoading] = useState(false);


  const fetchInfer = async () => {
    const title = document.getElementById('contentEditableSpanTitle')?.innerHTML ?? '';
    const data = document.getElementById('contentEditableSpanData')?.innerHTML ?? '';
    const params = { inputs: `${title}${data}` };
    console.log('params = ', title, '---', data);
    setLoading(true);
    try {
      const data = await api(params);
      setTextAreaDiv(data.replace(title, ''));
    } catch (error) {}
    setLoading(false);
  };

  return (
    <div>
      <div
        style={{
          resize: 'both',
          overflow: 'auto',
          padding: '5px',
          border: '1px solid #d9d9d9',
          minHeight: '100px',
        }}
      >
        <span id="contentEditableSpanTitle" contentEditable="true" style={{ border: 0, outline: 0 }}>
          {textArea}
        </span>
        <span id="contentEditableSpanData" contentEditable="true" style={{ border: 0, outline: 0, color: '#2563eb' }}>
          {textAreaDiv}
        </span>
      </div>
      <Button onClick={fetchInfer} loading={loading} style={{ margin: '10px 0' }}>
        Compute
      </Button>
    </div>
  );
}

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

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

相关文章

【Linux】shell脚本: 基本语法 和 高级特性

Shell脚本是一种用Shell语言编写的程序&#xff0c;它可以实现自动化的任务&#xff0c;如批量处理文件、监控系统状态、定时备份等。本文包括&#xff1a; Shell脚本的定义和作用&#xff1a;介绍什么是Shell脚本&#xff0c;它有哪些优点和缺点&#xff0c;它可以用来做什么。…

【macOS 系列】如何在mac下安装nvm实现多版本nodejs

文章目录 一、安装 nvm二、提示 commond not found:nvm的问题 一、安装 nvm 注意&#xff1a;mac下用nvm。win下用nvm-windows 以下步骤都是在命令行工具下执行&#xff1a; 1、安装 curl -o- [https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh](https://…

SPEC CPU 2006 在 CentOS 5.0 x86_64 古老系统测试

下载镜像 CentOS 2 3 4 5 6 等历史老版本下载地址 国内镜像地址_hkNaruto的博客-CSDN博客 下载CentOS 5.0 1-7 ISO文件 注意&#xff1a;尝试过下载DVD版本&#xff0c;速度太慢了。还是通过国内镜像下载这几个iso快。 安装虚拟机 VirtualBox 挂载第一个iso&#xff0c;启动…

计算机基础--->数据结构(7)【红黑树】

文章目录 二三树二三树的性质二三树一个简单的插入例子二三树的特点 红黑树红黑树的特点红黑树的节点红黑树的插入操作1. 左旋2. 右旋颜色翻转3. 颜色翻转插入实例 二三树 二三树与红黑树的性质非常相似&#xff0c;但是二三树能更直观的让人理解构建过程 二三树的性质 二三树是…

【机器学习核心总结】什么是GBDT(梯度提升树)

什么是GBDT(梯度提升树) 虽然GBDT同样由许多决策树组成&#xff0c;但它与随机森林由许多不同。 其中之一是GBDT中的树都是回归树&#xff0c;树有分类有回归&#xff0c;区分它们的方法很简单。将苹果单纯分为好与坏的是分类树&#xff0c;如果能为苹果的好坏程度打个分&…

云原生(第四篇)-k8s yaml文件

Kubernetes 支持 YAML 和 JSON 格式管理资源对象 JSON 格式&#xff1a;主要用于 api 接口之间消息的传递 YAML 格式&#xff1a;用于配置和管理&#xff0c;YAML 是一种简洁的非标记性语言&#xff0c;内容格式人性化&#xff0c;较易读 YAML 语法格式&#xff1a; ●大小写敏…

CentOS Linux的替代品(六)_BigCloud Enterprise Linux R8 U2 基础安装教程

文章目录 CentOS Linux的替代品&#xff08;六&#xff09;_BigCloud Enterprise Linux R8 U2 基础安装教程一、BC-Linux简介二、BigCloud Enterprise Linux R8 U2 基础安装2.1 下载地址2.2 安装过程 三、简单使用3.1 关闭selinux3.1.1 临时关闭selinux3.1.2 永久关闭selinux 3…

vscode 创建js 项目

1 创建 新窗口 2 进入文件夹 3 创建新的文件夹 4 选择 创建的文件夹 后 5 创建 js 文件 6 ctrl shift p 输入task 7 测试 8 F5 运行 选择调试器

打造品牌影响力:媒介易引领邀请明星录制祝福视频新潮流

在当今品牌推广的竞争激烈市场中&#xff0c;与体育冠军合作代言已成为众多品牌争相追求的新形式。体育冠军以其卓越的成就和广泛的影响力&#xff0c;成为品牌推广中的瞩目焦点。他们的形象和声音能够深入人心&#xff0c;激发消费者的共鸣&#xff0c;并对品牌产生积极的影响…

Mysql 幻读,当前读和快照读

什么是幻读 幻读指当用户读取某一范围的数据行时&#xff0c;另一个事务又在该范围内插入了新行&#xff0c;当用户在读取该范围的数据行时&#xff0c;会发现有新增行数据&#xff1b; mysql 在RR(可重复读)隔离级别利用间隙锁机制下一定程度上解决了幻读。 这里的一定程度…

Echarts 柱状图 设置柱状图渐变,设置柱状图圆角(弧度)

Echarts 柱状图 设置柱状图渐变&#xff0c;设置柱状图圆角&#xff08;弧度&#xff09; 1. 效果截图 2. 配置项截图 3. 具体代码 import * as echarts from echarts// 项目组织项目数 const territoryOptions {key: territory,title: {text: 项目数,textStyle: {fontSize:…

数据库死锁:原因和解决办法

理解数据库中的死锁 在数据库的上下文中&#xff0c;死锁是指两个或多个事务无法进行的情况&#xff0c;因为每个事务都在等待另一个事务释放资源。这可以类比为事务的循环链&#xff0c;每个事务都在等待链中的下一个事务释放资源。以下是一个死锁场景的视觉表示&#xff1a;…

Spring Boot 中的端点是什么,如何使用

Spring Boot 中的端点是什么&#xff0c;如何使用 Spring Boot 是一款流行的 Java Web 应用程序框架&#xff0c;它的设计目标是使开发人员可以更快速地创建和部署 Web 应用程序。Spring Boot 通过自动配置和约定大于配置的方式&#xff0c;使得开发人员可以专注于业务逻辑而不…

Spring面试题--SpringMVC的执行流程

Springmvc的执行流程是这个框架最核心的内容 视图阶段&#xff08;老旧JSP等&#xff09; 前后端分离阶段&#xff08;接口开发&#xff0c;异步&#xff09; 视图阶段&#xff08;老旧JSP等&#xff09; 1当请求放出&#xff0c;前端控制器接收请求&#xff0c;他相当于一个…

7月7日发布?OPPO A78 4G手机跑分库曝光

据报道&#xff0c;OPPO计划在7月7日发布A78 4G手机。在正式发布之前&#xff0c;该手机已经在GeekBench跑分库中出现。根据GeekBench 6.1版本&#xff0c;A78 4G单核成绩为411分&#xff0c;多核成绩为1263分。 跑分页面显示 OPPO A78 4G 型号为 CPH2565&#xff0c;主板代号为…

第四十章Java装箱拆箱机制

Java中的基本数据类型不是对象型&#xff08;引用类型&#xff09;。但是在程序中有时需要对对象而不是基本数据类型进行操作。因此&#xff0c;java里提供了一种叫做包装类(wrapper)&#xff0c;它能够把基本数据类型包装成对象类型。 Java中的包装器类有两个主要的作用 1&a…

11、架构:CI/CD 设计

本章内容是基于 DevOps 体系的精简版本&#xff0c;如果有阅读过之前 DevOps 小册的同学&#xff0c;可以快速掠过。 开局先放一张镇楼图&#xff0c;上图我在行云集团做的通用型 CI/CD 解决方案 ALL IN DOCKER&#xff0c;所有的操作构建与发布过程都在 Docker 中操作。 但很…

java进阶3:GC 的背景与一般原理

目录 为什么会有GC 背景&#xff1a; 理解&#xff1a; 可达性分析算法 基本思路&#xff1a; 标记清除算法 ​讲解 一 点睛 二 执行过程 三 什么是清除 四 缺点 STW 对象与分代 GC时对象在内存池中的迁移 GC Roots 总结 默认算法 标记-清除算法&#xff08;…

OpenCV创建一张类型为CV_8UC4的4通道图像

#include <iostream> #include <opencv2/imgcodecs.hpp> #include <opencv2/opencv.hpp> #include <opencv2/highgui.hpp>int m

Openlayers实战:自定义版权属性信息

Openlayers地图中,通常会展示地图的一个版权信息,这里面涉及到地图层的版权信息内容,还涉及到control中的Attribution的设置,本实战示例中,通过灵活的属性配置,显示了还是大剑师兰特的博客版权信息,点击是可以跳转的。 效果图 源代码 /* * @Author: 大剑师兰特(xiaoz…