需求: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’,赋予非表单标签内容可以编辑的更多相关文章

  1. struts2:非表单标签

    非表单标签主要用于输出在Action中封装的信息,这在实际运用中是很常见的. 1. actionerror标签 <s:actionerror>标签主要用于输出错误信息到客户端,该标签将Ac ...

  2. struts2:表单标签

    目录 表单标签1. form标签2. submit标签3. checkbox标签4. checkboxlist标签5. combobox标签6. doubleselect标签7. head标签8. f ...

  3. springmvc的表单标签

    1. Spring提供的轻量级标签库 2.可在JSP页面中渲染HTML元素的标签 3 用法 1)必须在JSP页面的开头处声明taglib指令 <%@ taglib prefix="fm ...

  4. struts2:表单标签续(datetimepicker标签)

    18. datetimepicker标签 18.1 拷贝JAR包 在struts-2.x.x压缩包的lib目录中拷贝struts2-dojo-plugin-2.3.8.jar到WEB-INF/lib目 ...

  5. Struts2_day04--自定义拦截器_Struts2的标签库_表单标签

    自定义拦截器 1 在struts2里面有很多的拦截器,这些拦截器是struts2封装的功能,但是在实际开发中,struts2里面的拦截器中可能没有要使用的功能,这个时候需要自己写拦截器实现功能 2 拦 ...

  6. [原创]java WEB学习笔记62:Struts2学习之路--表单标签:form,表单标签的属性,textfield, password, hidden,submit ,textarea ,checkbox ,list, listKey 和 listValue 属性,select ,optiongroup ,checkboxlist

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  7. Spring MVC---数据绑定和表单标签

                                   数据绑定和表单标签 数据绑定 数据绑定是将用户输入绑定到领域模型的一种特性,在Spring MVC的controller和view数据传递 ...

  8. Spring表单标签

    虽然我们可以使用HTML原生的form表单标签来轻松的写出一个表单,其实我一直都是这样做的,但是使用Spring表单标签可以更方便我们完成例如:验证失败后表单数据的回填功能(虽然你可以使用EL+JST ...

  9. 5.22 HTML 列表标签和表单标签

    1,ul无序列表 标签 ul:unordered list ,就是无序列表的意思. li:  listitem  列表项的意思.无序列表的每一项都是<li>. <!DOCTYPE h ...

随机推荐

  1. WEB前端学习资源清单

    常用学习资源 JS参考与基础学习系列 [MDN]JS标准参考 es6教程 JS标准参考教程 编程类中文书籍索引 深入理解JS系列 前端开发仓库 <JavaScript 闯关记> JavaS ...

  2. vivo7.0以上系统如何无需Root激活Xposed框架的方法

    在较多公司的引流或者业务操作中,基本都需要使用安卓的黑高科技术Xposed框架,几天前我们公司购买了一批新的vivo7.0以上系统,基本都都是基于7.0以上版本,基本都不能够获取Root的su超级权限 ...

  3. Retrofit+MVP框架封装记录篇

    当下最流行的网络请求组合,retrofit2+okhttp+rxjava+mvp 这里是封装记录篇 首先分模块,比如登录 先来说封装后的使用 package com.fragmentapp.login ...

  4. TextSwitcher 文本切换器的功能与用法

    TextSwitcher集成了ViewSwitcher, 因此它具有与ViewSwitcher相同的特性:可以在切换View组件时使用动画效果.与ImageSwitcher相似的是,使用TextSwi ...

  5. PM领导能力成熟度2级

    人生如戏,大幕拉开,他走上舞台,饰演PM一角. 从技术岗位迈向管理岗位的第一步,对大多数像他一样的新晋PM来说,并不轻松.技术知识与经验是他曾经的主要才能与成功基础,而从成熟度一级开始,身为管理者的他 ...

  6. JS直接调用C#后台方法(ajax调用)

    1. 先手动引用DLL或者通过NuGet查找引用,这里提供一个AjaxPro.2.dll的下载: 2. 之后的的过程不想写了,网上都大同小异的,直接参考以前大佬写的: AjaxPro2完整入门教程 总 ...

  7. Linux(CentOS7)yum安装卸载命令,离线下载安装包

    一.Linux版本 二.yum安装 比如安装vim编辑器,y是自动应答,即默认一路确认,不用中途确认 yum install -y vim 三.yum卸载 比如卸载掉刚刚安装的vim yum eras ...

  8. Golang mysql 上线的一个坑 Db.close重要性

    急冲冲完成的mysql的一个监控自动处理程序上线了,线下处理是正常的,没想到线上才半小时就奔溃了. 现在时间是晚上11点,心慌焦虑涌上心头,需要熬夜?肾上腺素激增. 程序主要是一个定时任务的处理程序, ...

  9. json和java对象相互转换

    json和java对象相互转换 springboot中json转换默认使用的是jackson包,通过spring-boot-starter-web依赖的 1 在属性上添加注解@JsonFormat(p ...

  10. (n)e(m)

    经常会看到类似于 1e30 9e5 类似的表达式 (我一个蒟蒻不懂啊) 于是 给自己解释解释 那么 nem就是 n乘以10的m次方 (哈哈哈哈,我简直是太弱了)