工作中遇到的两个问题-正则以及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在拳击比赛中指最轻量级,即“蝇量级”或“雨量级”,这里选择使用“享元模式”的意译,是因为这样更能反映模式的用意.享元模式是对象的结构模式.享元模式以共享的方式高效地支持 ...
随机推荐
- 【C】常用的字符串函数
1. strcpy 函数名:strcpy 用法:char *strcpy(char *destin, char *cource) 功能:将一个字符串从一个拷贝到另外一个 程序示例: #include ...
- 再谈C#编码规范
编码规范是老生常谈的问题,现在再看代码规范可能不会再去在意变量,控件的命名方法等,而是更加关注代码的实用性. 首先我们要明白一下几点, 1.代码写出来除了让他跑起来还有个非常非常重要的作用是维护,因为 ...
- java线程池相关接口Executor和ExecutorService
在线程池的api中,Executor接口是最上层的接口,内部只有一个方法.如下: public interface Executor { void execute(Runnable command); ...
- oracle 知识点
1.条件运算2.关联运算,子查询3.集合运算4.函数运算5.分组运算[group by](凑维度,条件,过滤,分组函数)6.行转列7.PL/SQL
- php性能优化学习笔记
编写代码 1.尽可能多的使用内置函数2.比对内置函数的时间复杂度,选择复杂度低的 比如 循环20万次-测试isset 和 array_key_exists 耗时 对比isset.php , array ...
- ubuntu 基础环境
一.序言 这里记录了安装ubuntu 系统,以及里面常用的东西,jdk,idea,maven,svn,git 等等工具的安装,因为这些动作不是经常操作的,因此这里做一个记录,方便新手或者忘记的时候看看 ...
- Luogu 5170 【模板】类欧几里得算法
原理不难但是写起来非常复杂的东西. 我觉得讲得非常好懂的博客. 传送门 我们设 $$f(a, b, c, n) = \sum_{i = 0}^{n}\left \lfloor \frac{ai + ...
- 4款APP原型设计工具助你搞定移动应用设计!
随着信息化社会的不断发展,不仅手机迭代更新的速度飞快,就连手机里的App 也层出不穷.作为一名UI/UX设计师或产品经理,如何才能设计一款出色的移动App?光有好的创意是不够的,你还需要一款正确的Ap ...
- 网络中的A、B、C类地址
1.A类ip地址(1.0.0.0到126.255.255.255) A类地址只有第一个8位表示网络地址,最高位一定为0,所以A类地址的网络号范围可以为:64+32+16+8+4+2+1=127,也就是 ...
- tp5和gateworer集成
第一步:安装thinkpph程序包 第二步:切换到根目录,使用composer require workerman/gateway-worker 安装Linux版本的gateway.(前提是你服务器安 ...