
HTML/CSS/JS
文章平均质量分 58
aitangyong
成长最快、最好的方式就是交流和总结!
展开
-
javascript正则RegExp.test()需要注意:不具有可重入性
对于同一个正则表达式对象regex,不能重复调用:第一次返回true,第二次就返回false,很显然这种效果不是我们想要的。这是因为RegExp.test()方法,第一次从位置0开始查找,可以匹配;第二次的查找位置就不是0了,说以就不能匹配了。解决方式挺简单:每次都让test从第0个位置开始匹配就可以了。原创 2016-05-21 16:08:49 · 2608 阅读 · 1 评论 -
javascript真的是异步的吗?且看setTimeout的实现原理以及setTimeout(0)的使用场景
JavaScript是单线程执行的,无法同时执行多段代码。当某一段代码正在执行的时候,所有后续的任务都必须等待,形成一个队列。一旦当前任务执行完毕,再从队列中取出下一个任务,这也常被称为 “阻塞式执行”。所以一次鼠标点击,或是计时器到达时间点,或是Ajax请求完成触发了回调函数,这些事件处理程序或回调函数都不会立即运行,而是立即排队,一旦线程有空闲就执行。所以 setTimeout 并不能保证执行的时间,是否及时执行取决于 JavaScript 线程是拥挤还是空闲。原创 2015-07-08 10:53:45 · 16038 阅读 · 4 评论 -
JavaScript修改CSS伪元素:after和:before的样式
CSS伪元素:before和:after可以实现很多有趣的功能,我们项目中使用的ionicframework框架的ionic.css文件中大量使用到了这2个伪元素。伪元素可以用来定义样式,但是和正常的dom元素不同,我们没有办法选中这些伪元素,也就不能像普通元素那样来修改它。我们没有办法直接选中伪元素来修改它的样式,只能是通过新增伪元素来覆盖之前伪元素的样式。原创 2015-06-29 20:01:19 · 39954 阅读 · 0 评论 -
通过<frameset>和<iframe>看JavaScript中window对象parent、self、top的区别
可以看到a.html能够通过<frameset>或者<iframe>包含另一个b.html,而b.html中也可以用同样的方式嵌套c.html。这样就在不同的html之间形成了明显的层次(父子)关系。我们知道每一个html都对应1个js的window对象,既然html有层次关系,window对象也同样有层次关系,而这层次关系就是通过top和parent、self这3个属性来表现的。1.在任何html页面中(window.self == window),self和window都是获取当前窗口自身的window原创 2015-06-08 09:35:49 · 5558 阅读 · 0 评论 -
CSS/JQuery元素选择器之&&和||,选择器的逻辑操作
使用CSS或JQuery选中元素的时候,很多时候我们需要对条件进行&&或者||操作。JQuery或者CSS中的||操作是很常用的,也很简单,就是通过逗号来分隔的。selector1,selector2,selectorN比如我们想选中div或者span,那么可以通过$("div,span")来选中满足条件的元素。原创 2015-06-27 17:34:55 · 6960 阅读 · 0 评论 -
javascript原型的修改与重写(覆盖)差别
每个JavaScript函数都有prototype属性(javascript对象没有这个属性),这个属性引用了一个对象,这个对象就是原型对象。javascript允许我们修改这个原型对象。修改有2种方式。方式1:在原有的原型对象上增加属性或者方法,方式2:重写(覆盖)原型对象。如果是先创建对象,然后再修改原型,那么如果采用方式1,已经创建的对象能够正确访问修改后的原型;如果采用方式2,已经创建的对象无法访问到修改后的原型。从这个角度来看,显然方式1比方式2更好。原创 2015-03-31 08:27:58 · 9301 阅读 · 0 评论 -
javascript正则表达式RegExp的静态属性之$1-$9
javascript正则表达式是支持分组捕获的,分组的结果会存储在RegExp的静态属性$1-$9中。也就是说当正则表达式中的分组超过9个的时候,RegExp最多只保留9个。// 含10个分组的正则var regexp = /(\w)-(\w)-(\w)-(\w)-(\w)-(\w)-(\w)-(\w)-(\w)-(\w)/;var str = 'a-b-c-d-e-f-g-h-i-j-k原创 2015-03-13 16:58:19 · 3320 阅读 · 0 评论 -
JQuery/Underscore等javascript框架中noConflict()的使用和实现原理
一般的javascript框架,都是通过向全局对象window中注入自己的属性实现的。比如JQuery向window中添加"$"对象,Underscore向window对象中添加"_"对象。如果在框架加载之前,已经存在这些全局变量呢,会怎么样呢? var $ = "$"; alert($ === "$");//false alert($().jquery);//1.10.2很原创 2015-03-11 17:30:01 · 1809 阅读 · 0 评论 -
return换行也有错?javascript中return的设计缺陷
javascript中return的设计缺陷原创 2015-03-04 22:47:33 · 6457 阅读 · 2 评论 -
javascript正则表达式之最长匹配(贪婪匹配)和最短匹配(懒惰匹配)
最近在阅读RequireJS 2.1.15源码,源码开始处定义了一系列的变量,有4个正则表达式:var commentRegExp = /(\/\*([\s\S]*?)\*\/|([^:]|^)\/\/(.*)$)/mg, cjsRequireRegExp = /[^.]\s*require\s*\(\s*["']([^'"\s]+)["']\s*\)/g, j原创 2015-03-03 12:41:25 · 8409 阅读 · 0 评论 -
一个简单的例子看明白如何利用window.location.hash实现ajax操作时浏览器的前进/后退功能
我们知道JavaScript中很早就提供了window.history对象,利用history对象的forward()、go()、back()方法能够方便实现不同页面之间的前进、后退等这种导航功能。但是AJAX操作,是不能用浏览器的前进和后退按钮进行导航的,因为浏览器并不会将AJAX操作加入到历史记录中。但是借助location.hash,我们能够自己实现AJAX操作的前进和后退。我们需要知道以下2点:1.如果location.hash发生了变化,那么浏览器地址栏url会发生变化,而且浏览器会产生1个历史记原创 2015-06-11 14:24:47 · 17752 阅读 · 6 评论 -
我所见过的最简短、最灵活的javascript日期转字符串工具函数
我们知道javascript的Date对象并没有提供日期格式化函数,将日期对象转换成"2015-7-02 20:35:11"等这种格式又是项目中很常用的需求。最近在我们项目中看到了一段代码,非常的简短,这里共享出来。原创 2015-07-02 20:40:49 · 1057 阅读 · 0 评论 -
javascript异步代码的回调地狱以及JQuery.deferred提供的promise解决方案
由于AJAX是异步的,所有依赖AJAX返回结果的代码必需写在AJAX回调函数中。这就不可避免地形成了嵌套,ajax等异步操作越多,嵌套层次就会越深,代码可读性就会越差。Promise对象有3种可能的状态:肯定状态(resolved)、否定状态(rejected)、等待状态(pending)。刚开始创建的Promise对象处于pending状态,只能从pending变成resolved或者是从pending变成rejected状态。可以看到Promise对象其实就是Deferred对象的一部分,Deferre原创 2015-07-22 17:23:28 · 6953 阅读 · 5 评论 -
IE9的F12工具,"网络"页签,点击"开始捕获"之后,请求显示的状态是"挂起"的分析和解决
S代码只有加载才会被执行,而触发js加载的正是html/jsp页面的显示。所以,我觉得Html/jsp就是js的执行环境。如果js还没有执行完,页面关闭的话,后续js代不会再执行。jquery拼post的请求体,会相对比较耗时,还没有执行完毕。此时页面关闭,JS终止了执行,浏览器发送了1个不完全的HTTP请求(没有附上请求体)原创 2013-11-24 21:24:53 · 13570 阅读 · 3 评论 -
看懂此文,不再困惑于javascript中的事件绑定、事件冒泡、事件捕获和事件执行顺序
抽空学习了下,javascript和jquery的事件设计,收获颇大,总结此贴,和大家分享。到这里是不是可以理解addEventListener(type,handler,useCapture)这个API中第三个参数useCapture的含义呢?useCapture=false意味着:将事件处理函数加入到冒泡阶段,在冒泡阶段会被调用;useCapture=true意味着:将事件处理函数加入到捕获阶段,在捕获阶段会被调用至此我们可以给出事件函数执行顺序的结论了:捕获阶段的处理函数最先执行,其次是目标阶段的处理原创 2015-01-28 23:13:11 · 18430 阅读 · 18 评论 -
简单了解文档碎片DocumentFragment的使用
上一篇文章介绍<template>元素的时候提到了文档碎片DocumentFragment,这篇文章我们学习下什么是文档碎片,以及文档碎片的使用方式。碎片的创建很简单,使用document.createDocumentFragment()即可。当请求把一个 DocumentFragment 节点插入文档树时,插入的不是DocumentFragment 自身,而是它的所有子孙节点。原创 2015-12-18 14:22:54 · 3332 阅读 · 1 评论 -
javascript捕获浏览器窗口关闭事件
为了防止用户不小心关闭浏览器窗口,或者我们想在浏览器窗口关闭的时候做一些事,那么我们会使用到window对象的onbeforeunload和onunload。原创 2016-01-17 14:55:10 · 5683 阅读 · 0 评论 -
eval()、window.eval()和with
eval()和window.eval()都可以用来动态执行javascript代码,能给js编程带来很大的灵活性,两者唯一的差别在于执行上下文不同。可以看到:window.eval()的执行上下文是“全局对象”,而eval()的执行上下文则是“调用eval的上下文环境”。IE6/7/8中,eval和window.eval一样,写在自定义函数内是局部闭包,否则是全局闭包。IE9/Firefox/Safari/Chrome/Opera中,eval同以上IE6/7/8,window.eval即使写在自定义函数内使原创 2015-11-20 10:27:03 · 4311 阅读 · 1 评论 -
javascript正则表达式:非捕获分组的一个使用例子
最近在看JsonSQL的时候,通过源码中的一段正则表达式,了解到了什么是非捕获分组以及它的使用场景。在js中,正常的捕获分组格式是(XX),非捕获分组格式为(?:XX)。我们先从正则表达式数量词说起,如果我们要求字符b至少出现一次,可以使用正则/b+/;如果要求ab至少出现一次,那么必需使用/(ab)+/,不能用/ab+/。也就是说,如果想对多个字符使用数量词,必需要用圆括号。可以看出捕获分组和非捕获分组的区别了吧:非捕获分组,只是用来匹配,并不会提取分组内容。也就是说,如果我们只想用圆括号将一些字符用数量原创 2015-11-21 10:20:24 · 3271 阅读 · 0 评论 -
javascript中关键字in以及循环for...in的使用和注意事项
写这篇文章,是因为在学习prototypejs库中方法Object.extend()和Class.create(),看这篇指导[tutorial on classes and inheritance]的时候,对于什么能够继承,什么不能继承产生了一些困惑。在看源码class.js和object.js的时候,发现extend方法使用到了javascript的for...in,发现自己对于这个东西并不是太熟悉,这里记录下。原创 2015-10-13 19:25:37 · 2890 阅读 · 0 评论 -
理清javascript中prototype、__proto__、Object、Function的关系,更好地理解原型继承
结论1:Object.prototype只是一个普通对象,它是js原型链的最顶端。结论2:在js中如果A对象是由B函数构造的,那么A.__proto__ === B.prototype。结论3:内置的Object是其实也是一个函数对象,它是由Function创建的。结论4:js中每一个对象或函数都有__proto__属性,但是只有函数对象才有prototype属性。结论5:Function.prototype是个特例,它是函数对象,但是没有prototype属性。其他所有函数都有prototype属原创 2015-04-03 23:03:26 · 6081 阅读 · 3 评论 -
我所见过的讲"javascript中apply、call、bind"最清晰最易懂的文章
首先声明这篇文章大部分内容都是转载的,转载自ChokCoco"深入浅出妙用Javascript中apply、call、bind"这篇文章。如此好文章仅仅作为一个链接放在优快云着实可惜,所以还是自己手动敲一遍,羞涩地冠以原创之名,作为自己的知识库。阮一峰的这段话说的真好啊,绝对说出了写博客人的心声。"对我来说,博客首先是一种知识管理工具,其次才是传播工具。我的技术文章,主要用来整理我还不懂的知识。我只写那些我还没有完全掌握的东西,那些我精通的东西,往往没有动力写。炫耀从来不是我的动机,好奇才是。"原创 2015-10-20 16:18:57 · 3249 阅读 · 0 评论 -
javascript正则表达式修饰符之global(/g)的使用
对于RegExp.exec方法,不加入g,则只返回第一个匹配,无论执行多少次均是如此;如果加入g,则第一次执行也返回第一个匹配,再执行返回第二个匹配,依次类推。原创 2015-03-02 07:55:35 · 3459 阅读 · 0 评论 -
javascript正则表达式修饰符之multiline(/m)的使用
也就是说只有当目标字符串含有\n,而且正则表达式中含有^或$的时候,/m修饰符才有作用。如果 multiline 为 false,那么“^”与字符串的开始位置相匹配,而“$”与字符串的结束位置相匹配。 如果 multiline 为 true,那么“^”与字符串开始位置以及“\n”或“\r”之后的位置相匹配,而“$”与字符串结束位置以及“\n”或“\r”之前的位置相匹配。由于target不是以abc开头的字符串,所以匹配singleline的结果是false;由于target是多行字符串(含有\n),而第2行原创 2015-02-28 21:56:19 · 3230 阅读 · 1 评论 -
CSS中display属性:block、inline和inline-block的区别
设置span的高度和宽度无效,span的margin和padding无效原创 2015-02-28 20:51:20 · 17289 阅读 · 7 评论 -
javascript中boolean的类型转换,运算符&&和|| 的返回值
javascript是一种弱类型的语言,任何数据类型都能转换成boolean类型,转换规则如下:数据类型 转换为boolean后的值NAN FALSEnull FALSE undefined FALSE Object原创 2014-10-17 10:37:02 · 2828 阅读 · 0 评论 -
javascript读取和修改原型特别需要注意的事儿,因为原型的读写不具有对等性
对于从原型对象继承而来的成员,其读和写具有内在的不对等性。比如有一个对象A,假设它的原型对象是B,B的原型对象是null。如果我们需要读取A对象的name属性值,那么JS会优先在A中查找,如果找到了name属性那么就返回;如果A中没有name属性,那么就到原型B中查找name,如果找到了就返回;如果原型B中也没有找到,由于此时已经到了原型链的最顶端,还是没有找到name,就直接返回undefine原创 2014-09-29 20:35:42 · 2898 阅读 · 2 评论 -
让你的javascript函数拥有记忆功能,减少全局变量的使用
让你的javascript函数拥有记忆功能,减少全局变量的使用原创 2014-11-13 13:32:30 · 2097 阅读 · 1 评论 -
简单理解javascript中的原型对象,实现对之间共享属性和行为
javascript中提供了构造函数,能够方便的创建对象。典型的构造函数如下:function Person(name, age) { this.name = name; this.age = age; this.say = function () { return this.name + ',' + this.age;;} 之后就可以用new和构造函数原创 2014-09-29 20:04:44 · 2902 阅读 · 0 评论 -
javascript中构造函数的返回值问题和new对象的过程
首先明确一点:javascript中构造函数是不需要有返回值的,这一点跟java很类似。可以认为构造函数和普通函数的最大差别就是:构造函数中没有return语句,普通函数可以有return语句;构造函数中会使用this关键字定义成员变量和成员方法,普通的函数不会使用this关键字定义成员变量和方法。function Person(name,sex) { this.name =原创 2014-09-29 19:16:04 · 4050 阅读 · 3 评论 -
Javascript构造函数中变量的作用域问题
构造函数可以与new一起使用,代表创建对象;也能够当做普通的函数调用,因为它也是一个函数。function Person(name) { this.name=name;}Person(12);alert(window.name);//12 可以看到当构造函数被当成普通函数调用的时候,this代表的是全局的window对象。很显然把构造函数当成普通函数调用,不是好的做法, 也原创 2014-09-29 18:38:28 · 3214 阅读 · 1 评论 -
javascript中区分鼠标单击和拖动事件
在javascript中,一般的DOM元素如div,都有onmousedown、onmousemove、onmouseup这3个鼠标事件。 当鼠标在div1上移动或者按下左键拖动的时候,都会触发onmousemove事件。如何区分这2种事件呢?如何区分鼠标单击弹起和拖动后弹起呢?区分鼠标单击弹起和拖动后弹起,可以注册onmousedown和onmouseup事件处理函数,在onmous原创 2014-11-11 11:01:58 · 11367 阅读 · 2 评论 -
不知道属性名称,动态遍历json中的所有键值对
javascript中使用ajax技术访问后台资源的时候,常常使用json作为轻量级数据传输格式。json类似于java中的HashMap,是由一系列的key-value键值对构成。如果后台返回给前台的json中key的值是动态生成的,那么我们没有办法使用常规的object.name或object["name"]的方式来获取json中的值。这个时候我们需要在不知道属性名称的时候,遍历json对象原创 2014-09-05 12:58:24 · 7256 阅读 · 0 评论 -
javascript中奇怪的if-else if-else
。javascript作为解释型语言,语法要求和编译提示都不像java/c这样严格。编写javascript的时候,一定要细心和规范,不然可能会出现你觉得非常诡异的问题。原创 2014-09-05 11:47:19 · 2180 阅读 · 2 评论 -
javascript中的稀疏数组(sparse array)和密集数组
学习underscore.js数组相关API的时候,遇到了sparse array这个东西,以前没有接触过。这里学习下什么是稀疏数组和密集数组。JavaScript中的数组并不像我们在C或java等语言中遇到的常规数组,在js中数组并不是起始地址+长度构成的一片连续的地址空间。原创 2014-10-17 21:52:20 · 6239 阅读 · 0 评论 -
了解javascript中的apply和call
apply和call是javascript中很重要的方法,虽然平时编程很少接触到,但是JS框架中到处在使用这2个方法。这2个方法是在Function.prototype中,也就是说每个JS函数都有这2个方法。alert(Function.prototype.hasOwnProperty("apply"));//truealert(Object.prototype.hasOwnProper原创 2014-10-17 20:21:58 · 1030 阅读 · 2 评论 -
javascript中两种定义函数方式的差别以及函数的预编译效果
我们知道在function mm(){ }这种形式是声明一个函数,跟 var 一个变量的机制一样,脚本在解释执行之前会做预编译处理,而 var mm = function(){ }这种形式是对一个变量赋值,虽然也做预编译,但仅仅只是给 mm 事先变量分配一个内存空间,而没有做初始化原创 2014-11-04 16:57:58 · 1096 阅读 · 0 评论 -
W3C/JQuery中stopImmediatePropagation和stopPropagation的区别
W3C的DOM-Level-3标准中,event事件对象有stopPropagation和stopImmediatePropagation这2个函数。DOM3中Event标准:http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html。JQuery我用的是2.1.1和1.10.2,也支持原创 2015-01-31 14:02:14 · 2173 阅读 · 0 评论 -
CSS让2个DIV在同一行显示的解决方法
在CSS中,div属于块级元素,每个块级元素默认占一行高度,一行内添加一个块级元素后无法一般无法添加其他元素(float浮动后除外)。两个块级元素连续编辑时,会在页面自动换行显示。所以默认情况下,2个div是无法显示在同一行的,必须通过样式属性去修改。 解决方方法1:display:inline,将其变成行级元素,这样2个div就会排在同一行。 解决方法原创 2015-01-16 13:26:16 · 80350 阅读 · 5 评论 -
了解URL编码的基本概念,在javascript和java程序中使用内置的API进行编码和解码
所谓URL编码,就是将非US-ASCII字符和US-ASCII中的特殊字符,用相应的字符集编码来表示。比如,汉字”你”,如果用UTF-8编码,出现在URL中是%E4%BD%A0,如果用GBK编码出现URL中是%C4%E3。RFC3986文档规定,URL中只允许包含英文字母(a-zA-Z)、数字(0-9)、4个特殊字符("-" / "." / "_" / "~")以及所有保留字符。原创 2014-12-08 22:27:36 · 2611 阅读 · 0 评论