工作中遇到的两个问题-正则以及console
一.今天做点击按钮验证邮箱时,遇到以下几个问题:
(1)点击按钮后,执行if(regExp.test(str)),出现一种奇怪的现象:第一次输入正确邮箱验证通过,第二次输入正确邮箱就返回false,第三次又验证通过....
自己百思不得其解,直接找老大调试。老大用谷歌自带调试工具弄了20分钟,也没找到原因。
后面自己通过百度搜索和360搜索都没搜到,用https://g.ttlsa.com/一搜,就找到了原因。原因是regExp.lastIndex惹的货。原来老大和我因为时间太长,忘记了这个东西,这是正则里面很简单的问题。
只要regExp里面的正则表达式包含g属性(也就是全局属性),那么regExp就会保存上次的lastIndex值。因此就出现:
第一次验证通过后,由于设置了g属性,因此lastIndex值就变成了str的长度。 第二次验证时,直接从lastIndex开始,因此就会返回false。这时lastIndex就会变成0.第三次验证时,又可以验证通过。
解决办法:在if语句里面,执行regExp.lastIndex=0,就可以解决这个问题了。
(2)在事件委托时,需要判断target是否是I标签,我用的是if(target == $("i")[0])。老大说:你应该通过if($(target).prop("nodeName") == "I")去判断,减少了再去找I元素引起的Dom操作性能问题,然后我问:那要有很多歌I元素呢,他说你可以通过if($(target).prop("nodeName") == "I"&&$(target).hasClass("特有类"))等等这样特有的属性来判断。最后,我问了一句为啥用prop而不用attr,他说,你自己去百度。然后我就去百度了。区别:
1.DOM 对象属性(property)及 HTML 标签属性(attribute),prop操作property,attr操作attribute。DOM对象属性通过元素.property来取得,和设置。HTML标签属性,通过setAttribute和getAttribute来设置。
2. HTML元素的内置build-in属性,attribute和property共享数据,attribute更改了会对property造成影响,反之亦然,但是两者的自定义属性是独立的数据,即使name一样,也互不影响,但是IE6、7没有作区分,依然共享自定义属性数据。
3.并不是所有的attribute与对应的property名字都一致,比如刚才使用的attribute 的class属性,使用property操作的时候应该是这样className。t.className='active2';
4.类似于input的checked属性等,attribute取得值是HTML文档字面量值,property是取得计算结果(true or false),property改变并不影响attribute字面量,但attribute改变会影响property计算。var t=document.getElementsByTagName('input'); console.log(t.getAttribute('checked')); //null console.log(t.checked); //false; t.setAttribute('checked','checked'); console.log(t.getAttribute('checked')); //checked console.log(t.checked); //true t.checked=false; console.log(t.getAttribute('checked')); //checked console.log(t.checked); //false
5. 对于一些和路径相关的属性,两者取得值也不尽相同,但是同样attribute取得是字面量,property取得是计算后的完整路径
var t=document.getElementsByTagName('a');
console.log(t.getAttribute('href'));//#
console.log(t.href);//file:///C:/Users/bsun/Desktop/ss/anonymous.html#
在jQuery1.6之前,.attr()方法在获取一些attributes的时候使用了property值,这样会导致一些不一致的行为。在jQuery1.6中,.prop()方法提供了明确的获取property值的方式,这样.attr()方法仅返回attributes。selectedIndex
,tagName
,nodeName
,nodeType
,ownerDocument
,defaultChecked
, 和defaultSelected应该使用.prop()方法获取/设置值,因为这几个并没有相应的attibute,只有property。
(这就解释了我老大为什么要用prop("nodeName")=="I",来处理了)。
checkbox的checked属性property是一个布尔值,这就意味着只要checked属性在HTML中表现出来了,那么相应的property就应该是true,即使checked没有值,这点儿对其它布尔类型的属性一样适用。
var elem = $('<input type="checkbox" checked=null(空字符"") /> ');
console.log(elem[0].checked); //true(true) var elem = $('<input type="checkbox" checked=false/> ');
console.log(elem[0].checked); //true
还有一点:checked attribute并不随着checkedbox的状态而改变,但是checked property却跟着变。因此浏览器兼容的判断checkebox是否被选中应该使用property:if ( elem.checked ),if ( $( elem ).prop( "checked" ) ),if ( $( elem ).is( ":checked" ) ),这对其它一些类似于selected、value这样的动态attribute也适用。
二.由于IE8一下浏览器,不支持原生的console,但是有时为了开发测试,会在js文件添加console打印日志,但是上线时,为了在低版本浏览器下不出问题,可以使用
if(!window.console){
window.console = {
log:function(){},
time:function(){},
timeEnd:function(){}
};
}
加油!
工作中遇到的两个问题-正则以及console的更多相关文章
- css布局 - 工作中常见的两栏布局案例及分析
突然想到要整理这么一篇平时工作中相当常见但是我们又很忽视的布局的多种处理方法.临时就在我经常浏览的网站上抓的相对应的截图.(以后看到其他类型的我再补充) 既然截了图,咱们就直接看人家使用的布局方式,毕 ...
- 工作的思考十七:工作中容易犯的错误 - Delay
其实IT是一个很严谨的行业,不管是从代码角度还是从日常的工作分配都是按计划来的. 从今年年初到现在,在我的工作中出现了两次“Delay”,第一次不以为然,虽然上司也找过我谈话,但没意识到问题的严重性. ...
- 【python正则】工作中常用的python正则代码
工作中常用的一些正则代码: 01.用户名正则 import re # 4到16位(字母,数字,下划线,减号)if re.match(r'^[a-zA-Z0-9_-]{4,16}$', "ab ...
- linq介绍及工作中应用两例——左联与内联,linq循环方法
目录 1 linq介绍 1.1 linq产生背景 1.2 linq使用范围 1.3 linq核心程序集 1.4 linq架构图 1.5 linq使用形式对比 1.5.1 linq To Objects ...
- 工作中那些提高你效率的神器(第一篇)_Everything
引言 无论是工作还是科研,我们都希望工作既快又好,然而大多数时候却迷失在繁杂的重复劳动中,久久无法摆脱繁杂的事情. 你是不是曾有这样一种想法:如果我有哆啦A梦的口袋,只要拿出神奇道具就可解当下棘手的问 ...
- 运维工作中sed常规操作命令梳理
sed是一个流编辑器(stream editor),一个非交互式的行编辑器.它一次处理一行内容.处理时,把当前处理的行存储在临时缓冲区中,称为"模式空间",接着用sed命令处理缓冲 ...
- 教你如何在工作中“偷懒”,python优雅的帮你解决
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取htt ...
- [工作中的设计模式]解释器模式模式Interpreter
一.模式解析 解释器模式是类的行为模式.给定一个语言之后,解释器模式可以定义出其文法的一种表示,并同时提供一个解释器.客户端可以使用这个解释器来解释这个语言中的句子. 以上是解释器模式的类图,事实上我 ...
- [工作中的设计模式]享元模式模式FlyWeight
一.模式解析 Flyweight在拳击比赛中指最轻量级,即“蝇量级”或“雨量级”,这里选择使用“享元模式”的意译,是因为这样更能反映模式的用意.享元模式是对象的结构模式.享元模式以共享的方式高效地支持 ...
随机推荐
- SAP middb主键加索引
alter table DEPTBIGCPDL_DBC drop constraint DEPTBIGCPDL_DBC_PK CREATE UNIQUE INDEX TABLEAU_USER.DEPT ...
- Inception
http://baijiahao.baidu.com/s?id=1601882944953788623&wfr=spider&for=pc
- springboot中端点监管 endpoint actuator
1.pom文件 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="htt ...
- sql游标使用
一.游标的作用:Select时,返回的是一个结果集,若需要为结果集返回的过程中,读取到一行数据.需要对此行数据进行处理,比如按读取到的数据作为查询条件返回一个查询结果集等等,应用都需要用到游标.游标可 ...
- linux git server 简易搭建 (ssh访问)
git的服务器搭建,如果无需权限控制,仅团队内部使用,初始化一个服务器仓库,其他人通过ssh访问这个文件夹即可.如需复杂的管理,建议使用gitlab. yum install git -y id gi ...
- centos下修改文件后如何保存退出
centos下修改文件后如何保存退出 保存命令 按ESC键 跳到命令模式,然后: :w 保存文件但不退出vi :w file 将修改另外保存到file中,不退出vi :w! 强制保存,不推出vi :w ...
- util:properties
示例 <util:properties id="db" location="classpath:db.properties" /> 全部属性 功能概 ...
- SDK管理利器——sdkman
SDK管理利器--sdkman 项目使用java的开发者一定会为新配环境变量而头大,sdkman很好的解决了系统sdk管理的痛点,仅需简单的几行命令就可以完成sdk的安装,更改默认版本.再也不用担心环 ...
- Oracle Alert - APP-ALR-04108: SQL error ORA-01455
SELECT OD.ORGANIZATION_CODE, TO_CHAR(H.ORDER_NUMBER), --ORACLE ALERT 自动转数字类型最长11位,转字符处理解决APP-ALR-041 ...
- Oracle EBS Add Responsibility to User by the Responsibility reference of Other User.
Oracle EBS 11i Add Responsibility to User by the Responsibility reference of Other User. Warning: R1 ...