<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效果。
<div class='d' contentEditable='true' placeholder='请输入您的建议'></div>
.d:before {
//有:before
content: attr(placeholder);
display: block;
color: #adadad;
} <div class='a' contentEditable='true' placeholder='请输入您的建议'></div>
.a{
// 无:before
}
遇到的问题:仿‘placeholder’在safari的表现不同。当用输入框内输入值后,在删除输入框,safari无法用DOM.innerText或者DOM.innerHTML的length来做判断,因为删除完后,在输入框中有一个空换行符。具体原理本人不是很懂。
解决方案:在length的判断基础上再额外加判断条件
var val=DOM.innerHTML; val.length > 0 && val != '<br>' && val != '<br/>'; var val2=DOM.innerText; val2.length > 0 && val2 != '<br>' && val2 != '<br/>'
如果你不需要用到上面的方法可以使用DOM.textContent。safari和chrome表现相同,具体场景使用具体的API来操作。
至于三者的区别,笔直理解不透彻,就不描述了。
以上是纯属个人开发中遇到的问题和理解,如有错误,请谅解。
<div>标签仿<textarea>。contentEditable=‘true’,赋予非表单标签内容可以编辑的更多相关文章
- struts2:非表单标签
非表单标签主要用于输出在Action中封装的信息,这在实际运用中是很常见的. 1. actionerror标签 <s:actionerror>标签主要用于输出错误信息到客户端,该标签将Ac ...
- struts2:表单标签
目录 表单标签1. form标签2. submit标签3. checkbox标签4. checkboxlist标签5. combobox标签6. doubleselect标签7. head标签8. f ...
- springmvc的表单标签
1. Spring提供的轻量级标签库 2.可在JSP页面中渲染HTML元素的标签 3 用法 1)必须在JSP页面的开头处声明taglib指令 <%@ taglib prefix="fm ...
- struts2:表单标签续(datetimepicker标签)
18. datetimepicker标签 18.1 拷贝JAR包 在struts-2.x.x压缩包的lib目录中拷贝struts2-dojo-plugin-2.3.8.jar到WEB-INF/lib目 ...
- Struts2_day04--自定义拦截器_Struts2的标签库_表单标签
自定义拦截器 1 在struts2里面有很多的拦截器,这些拦截器是struts2封装的功能,但是在实际开发中,struts2里面的拦截器中可能没有要使用的功能,这个时候需要自己写拦截器实现功能 2 拦 ...
- [原创]java WEB学习笔记62:Struts2学习之路--表单标签:form,表单标签的属性,textfield, password, hidden,submit ,textarea ,checkbox ,list, listKey 和 listValue 属性,select ,optiongroup ,checkboxlist
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- Spring MVC---数据绑定和表单标签
数据绑定和表单标签 数据绑定 数据绑定是将用户输入绑定到领域模型的一种特性,在Spring MVC的controller和view数据传递 ...
- Spring表单标签
虽然我们可以使用HTML原生的form表单标签来轻松的写出一个表单,其实我一直都是这样做的,但是使用Spring表单标签可以更方便我们完成例如:验证失败后表单数据的回填功能(虽然你可以使用EL+JST ...
- 5.22 HTML 列表标签和表单标签
1,ul无序列表 标签 ul:unordered list ,就是无序列表的意思. li: listitem 列表项的意思.无序列表的每一项都是<li>. <!DOCTYPE h ...
随机推荐
- js之制作简易红绿灯
HTML代码: 在一个div容器内,设置3个span <body> <div id="i1"> <span class="light red ...
- 第二章 Linux目录学习
Linux 目录结构相对windows来说更简单,Linux 目录 以 斜杠 / 为根目录,其整体结构是以/为根的树状结构. 使用 tree -L 1 查看1级目录结构 /bin 常用的二进制命令目录 ...
- Fragment生命周期以及使用时的小问题
前言- 昨天在写UI的时候用到了FRAGMENT,发现自己对此还不是非常了解,借此机会记录一下 Fragment的生命周期- 官方生命周期图: Fragment每个生命周期方法的意义.作用- onVi ...
- 基于python的种子搜索网站-开发过程
本讲会对种子搜索网站的开发过程进行详细的讲解. 源码地址:https://github.com/geeeeeeeek/bt 项目开发过程 项目简介 该项目是基于python的web类库django开发 ...
- python 验证码识别库pytesseract的使用
笔者环境 centos7 python3 pytesseract只是tesseract-ocr的一种实现接口.所以要先安装tesseract-ocr(大名鼎鼎的开源的OCR识别引擎). 依赖安装 yu ...
- Go语言打造以太坊智能合约测试框架(level3)
传送门: 柏链项目学院 第三课 智能合约自动化测试 之前课程回顾 我们之前介绍了go语言调用exec处理命令行,介绍了toml配置文件的处理,以及awk处理文本文件获得ABI信息.我们的代码算是完成了 ...
- 禁用windows10自动更新
更换win10系统后经常会自动更新,每次关机前都会提示关机并更新选项,禁用window update后每隔几天还是会出现 解决:同时禁用以下两项 Windows Update Medic Servic ...
- 周一02.3运行python程序的两种方式
一.运行python程序的两种方式 方法一:交互式: 优点:输入一行代码立刻返回结果 缺点:无法永久保存代码 方法二: ...
- Oracle中用序列和触发器实现ID自增
在设计数据库的时候,Oracle中没有类似SQL Server中系统自动分配ID作为主键的功能,这时Oracle可以通过“序列”和“触发器”来实现ID自动增加的功能. 1.创建序列Sequence c ...
- MySQL存储引擎InnoDB与MyISAM的区别
一.比较 事务:InnoDB是事务型的,可以使用Commit和Rollback语句. 并发:MyISAM只支持表级锁,InnoDB还支持行级锁. 外键:InnoDB支持外键. 备份:InnoDB支持在 ...