<div>标签仿<textarea>。contentEditable=‘true’,赋予非表单标签内容可以编辑

需求:web页面需要一个文本输入框。1、该文本输入框默认状态下有个仿‘placeholder’的默认文本提示信息,2、文本框输入状态下其高度会随文本内容自动撑开。

方案选择:1、使用<textarea>标签。但是标签高度不会随文本高度自动撑开,而是出现滚动条。使用JS动态计算文本内容高度赋予<textarea>标签高度。

     2、使用<div>或者<p>、<span>等非表单标签,通过赋予其contentEditable=‘true‘属性,是其获得内容可以编辑的功能,从而使标签高度随着文本内容高度自动撑开。

遇到的问题:方案一遇到的问题此文不做讨论。

使用contentEditable属性虽然满足的需求2,但是无法满足需求1。

1 <div contentEditable=‘true‘></div>

解决方案:使用:before伪元素达到仿‘placeholder’的效果。

使用css3的attr()函数。获取div标签中的‘placeholder’或者其他自定义属性‘data-*‘的值,赋予:before伪元素展示即可。

当文本输入的时候,使用JS替换div标签的classname,使其没有:before伪元素,当输入框没有值得时候再替换classname,重新赋予:before伪元素,即可达到input等表单标签的placeholder效果。

 1 <div class=‘d‘ contentEditable=‘true‘ placeholder=‘请输入您的建议‘></div>
 2 .d:before {
 3          //有:before
 4          content: attr(placeholder);
 5          display: block;
 6          color: #adadad;
 7 }
 8
 9 <div class=‘a‘ contentEditable=‘true‘ placeholder=‘请输入您的建议‘></div>
10 .a{
11       // 无:before
12 }

遇到的问题:仿‘placeholder’在safari的表现不同。当用输入框内输入值后,在删除输入框,safari无法用DOM.innerText或者DOM.innerHTML的length来做判断,因为删除完后,在输入框中有一个空换行符。具体原理本人不是很懂。

解决方案:在length的判断基础上再额外加判断条件

1 var val=DOM.innerHTML;
2
3 val.length > 0 && val != ‘<br>‘ && val != ‘<br/>‘;
4
5
6 var val2=DOM.innerText;
7
8 val2.length > 0 && val2 != ‘<br>‘ && val2 != ‘<br/>‘

如果你不需要用到上面的方法可以使用DOM.textContent。safari和chrome表现相同,具体场景使用具体的API来操作。

至于三者的区别,笔直理解不透彻,就不描述了。

以上是纯属个人开发中遇到的问题和理解,如有错误,请谅解。

时间: 2024-07-31 22:19:12

<div>标签仿<textarea>。contentEditable=‘true’,赋予非表单标签内容可以编辑的相关文章

Struts2中UI标签之非表单标签

1.非表单标签主要用于在页面生成一些非表单的可视化元素,例如Tab页面,输出HTML页面的树形结构等.当然,非表单标签也包含在页面显示Action里封装的信息,非表单标签主要有如下几个: a:生成一个超级连接(link). actionerror:如果Action实例的getActionError()方法返回不为null,则该标签负责输出该方法返回的系列错误. actionmessage:如果Action实例的getActionMessage()方法返回不为null,则该标签负责输出该方法返回的

struts2学习笔记之十三(表单标签和非表单标签)

表单标签 这些UI标签都可以指定cssClass,cssStyle来指定CSS样式,而且可以指定大量的onXxx属性,用于绑定JS函数 form : 表单 head :引入一些辅助的css样式单和js脚本 hidden :隐藏域 label :生成一个标签 password : 生成一个密码框 select :列表框 checkbox : 只是生成一个复选框 radio :不是生成一个单选框 file :生成一个文件上传域 textfield :单行文本域 textarea :多行文本域 sub

表单标签概述及详解

1.1 表单标签概述1.1.1 什么是表单标签我们去银行办理一些业务的时候,我们通常需要填写一些纸质单据,而如果我们在网页中需要填写一些单据呢?我们可以通过HTML的表单来实现.例如:1.2 表单标签详解1.2.1 输入项标签<input/>标签表单输入项标签之一,用户可以在该标签上 通过填写和选择 进行数据的输入.? type:设置该标签的种类ü text:文本框. 默认ü password:密码框. 内容为非明文ü radio:单选框. 在同一组内有单选效果ü checkbox:复选框.

前端之head标签,基本标签,div和span,常用标签,表单标签

一.head标签 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <link rel="icon" href="https://www.jd.com/favicon.ico"> <meta name="keyw

Spring表单标签

虽然我们可以使用HTML原生的form表单标签来轻松的写出一个表单,其实我一直都是这样做的,但是使用Spring表单标签可以更方便我们完成例如:验证失败后表单数据的回填功能(虽然你可以使用EL+JSTL来实现),但是使用spring表单标签更为方便. 如同使用JSTL一样,我们需要先在JSP页面中使用taglib指令导入: <%@taglib prefix="form" uri="http://www.springframeork.org/tags/form"

(二十二)Struts2 表单标签

表单标签列表是Struts UI标签的子集.这些标签有助于渲染Struts Web应用程序所需的用户界面,主要分为三类,本章将介绍这三种类型的UI标签: 简单UI标签 我们其实已经在前面的示例中使用了这些标签,接下来将在本章中重新回顾一下.以下是一个简单的视图页面email.jsp与几个简单的UI标签: <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncodi

HTML表单标签

表单标签 <form action="" method=""></form> form 标签为html创建一个表单 action属性表示表单要提交到的页面 method属性表示表单数据提交时的传输方式  get|post get和post的区别 1.get明文传输,不安全,post密文传输,安全 2.get最多可传输255个字符,post对传输字符去限制 文本框标签<input /> 1.普通文本框 <input type=

Struts2 表单标签

form 标签的列表是Struts的UI标签的一个子集.这些标签可以帮助渲染中需要Struts Web应用程序和用户界面可以分为三类.本章将带你通过所有三种类型的UI标签: 简单UI标签: 我们已经使用这些标签已经在我们的例子中.让我们来看看一个简单的一些简单UI标签的视图页面email.jsp: <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding=

08.16号 dom 节点的创建 和删除DOM表单与非表单取值的方法 和操作属性与操作样式

<html> <head> <meta charset="utf-8"> <title>Dom操作</title> <script type="text/javascript" src="08.16/08.16.js"></script> </head> <body> <!--dom节点添加 删除 ; createElemen 创建一