十二 06

两个故事理解阻塞非阻塞与同步异步的区别

故事一:

“阻塞”与”非阻塞”与”同步”与“异步”不能简单的从字面理解,提供一个从分布式系统角度的回答。
1.同步与异步
同步和异步关注的是消息通信机制 (synchronous communication/ asynchronous communication)
所谓同步,就是在发出一个*调用*时,在没有得到结果之前,该*调用*就不返回。但是一旦调用返回,就得到返回值了。
换句话说,就是由*调用者*主动等待这个*调用*的结果。

而异步则是相反,*调用*在发出之后,这个调用就直接返回了,所以没有返回结果。换句话说,当一个异步过程调用发出后,调用者不会立刻得到结果。而是在*调用*发出后,*被调用者*通过状态、通知来通知调用者,或通过回调函数处理这个调用。 Continue reading

十二 06

mutable variable accessible from closure

使用WebStorm开发百度地图API时,在WebStorm中变量new_info提示:mutable variable accessible from closure…,译:可从闭包中访问的可变变量。在实际运行中,函数_translateCallback2()的形参info接收到元素的个数总是小于变量new_info传入元素个数,原因是在translate()函数的回调没有执行完,for就进行了下一个循环,或者是下几个循环。

解决方法:

1、在使用for循环时,不要使用带有回调函数的方法;

2、如果一定要使用带有回调函数的方法,那就用立即执行匿名函数括起来,如下:

(function(){ …… })(i);

 

23

JS使用replace()方法匹配替换手机号、座机号、带区号连接符座机号

老客户的一论坛需要把会员发布的手机号、座机号转成可点击拨号的链接,首先我考虑,是要在会员发布提交时进行处理,还是在发布后进行处理。

我选择在发布后进行前台处理。

需要使用JS replace()方法和正则知识

另一篇关于replace方法与正则基础知识的介绍

测试代码实例:

解释:

因为客户代码中是要对不相连的多个区块中进行处理,所以选择器只能抓取comeing类,这样的话,下面就必须使用for循环,如果可以选择整个区域的话,那选择器就抓取mrdede类,不使用for循环,matchHtml = matchS.eq(i).html()改为matchHtml = matchS.html()即可。

replace方法正则替换

var regexp = new RegExp(/(1)(2)(3)/g);

se = matchHtml.replace(regexp, ‘$3 $1 $2′);

RegExp中的正则表达式,其中在两个正斜杠“/”之间区域,有并列的多个(),

那么这多个()把匹配的内容,从左向右依次为$1 $2 $3 ……

如果:

var regexp = new RegExp(/(123)/g);

se = matchHtml.replace(regexp, ‘$1我被找到了’);

RegExp中的正则表达式,其中在两个正斜杠“/”之间区域,只有一个()或没有(),

那么只有$1可以参与替换,

替换时不是一定要使用$1 $2 $3 …… 进行替换,也可以使用其它字符进行替换。

关于实例中正则的解释(从左向右依次解释):

全部原始正则表达式([^0-9])([0-1]{1}[1-9][0-9]{1,2}[^0-9]?[0-9]{7,8}|[1-9]\d{6,7})([^0-9])

([^0-9])以非数字开头(即$1)

原始中的第二段([0-1]{1}[1-9][0-9]{1,2}[^0-9]?[0-9]{7,8}|[1-9]\d{6,7}) 即$2

[0-1]{1}解释:0到1之间(含)的数字必须出现一次

[1-9]解释:1到9之间(含)的数字必须出现一次

[0-9]{1,2}解释:0到9之间(含)的数字至少出现一次,最多出现两次

[^0-9]?解释:非数字的任意一个字符至少出现0次,最多出现一次

[0-9]{7,8}解释:0到9之间(含)的数字至少出现7次,最多出现8次

|解释:或者的意思

[1-9]解释:1到9之间(含)的数字必须出现一次

\d{6,7}解释:0到9之间(含)的数字至少出现6次,最多出现7次

最后面的([^0-9])解释:以非数字结尾(即$3 这样就能保证不匹配以0或1开头的大于12位的数字串了)

注注注:

此正则写法只可使用在JS的replace方法进行替换的情况,如果想用在其它地方,需要去掉正则前后的([^0-9]) 即使用[^0-9])([0-1]{1}[1-9][0-9]{1,2}[^0-9]?[0-9]{7,8}|[1-9]\d{6,7})([^0-9],但是如果想更严谨一些的话,可以再改造。

其实我写的这段正则用在replace方法中匹配替换手机号与座机号时,还是不太严谨,但是绝大多数情况还是可以的。

==========================================

修改:

就在刚才,发布完文章,又做了一下修改,上面实例中双斜杠注释掉的部分是原来的

在它下面两行是改后的,这样就更严谨一些了。

var regexp = new RegExp(/([^0-9])([0-1]{1}[1-9][0-9]{1,2})([^0-9]?)([0-9]{7,8}|[1-9]\d{6,7})([^0-9])/g);

se = matchHtml.replace(regexp, '$1<a style="color:#09f;text-decoration:underline;" href="tel:$2$4">$2$3$4</a>$5');

把原来中间部分([0-1]{1}[1-9][0-9]{1,2}[^0-9]?[0-9]{7,8}|[1-9]\d{6,7})改为([0-1]{1}[1-9][0-9]{1,2})([^0-9]?)([0-9]{7,8}|[1-9]\d{6,7})

也就是把原来的中间部分分成了三个部分,现在全部正则为/([^0-9])([0-1]{1}[1-9][0-9]{1,2})([^0-9]?)([0-9]{7,8}|[1-9]\d{6,7})([^0-9])/ 

所以在替换的时候就有$1$2$3$4$5这五个部分可以参与替换了。

其中$2各$4是实际打可拨打号码的部分,所以在链接中使用href=”tel:$2$4″

中间部分就是$2$3$4的组合了

尾部$5

这样就防止替换的座机号存在非数字时也参与拨号的情况出现了,如抓取到的号码为010-12345678或010 12345678,在拨打时就是01012345678

我不知道在拨号时区号与直拨号间有横杠或空格时能不能拨得出去,没试,也就不试。

个人感觉,严谨一些的话,还是现在这样写正则比较好。

==========================================

再次修改正则:

上一次修改后不能匹配7位和8位的电话直拨号,有错误。

这回测试了,可用,没问题了。哈哈

另附一图,关于replace的替换变量的规律的,如下:

JS使用replace()方法匹配替换手机号、座机号、带区号连接符座机号

23

JS replace方法替换字符串实例及正则表达式基础知识

1、javascript 正则对象替换创建 和用法: /pattern/flags  先简单案例学习认识下replace能干什么

正则表达式构造函数: new RegExp("pattern"[,"flags"]);

正则表达式替换变量函数:stringObj.replace(RegExp,replace Text);

参数说明:
pattern — 一个正则表达式文本
flags — 如果存在,将是以下值:
g: 全局匹配
i: 忽略大小写
gi: 以上组合 Continue reading

十一 06

PHP使用$_SERVER['HTTP_USER_AGENT'];获取User Agent信息,另附JS方法

PHP使用$_SERVER['HTTP_USER_AGENT'];获取User Agent信息,通过查找信息的异同并加以判断语句来实现只允许页面在微信内置浏览器打开,或只允许在手机QQ内置浏览器打开,或其它浏览器打开等。

安卓系统

手机UC浏览器:
Mozilla/5.0 (Linux; U; Android 4.2.2; zh-CN; Hol-T00 Build/HUAWEIHol-T00) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 UCBrowser/10.7.5.655 U3/0.8.0 Mobile Safari/534.30

手机QQ浏览器:
Mozilla/5.0 (Linux; U; Android 4.2.2; zh-cn; Hol-T00 Build/HUAWEIHol-T00) AppleWebKit/537.36 (KHTML, like Gecko)Version/4.0 MQQBrowser/6.1 Mobile Safari/537.36

手机QQ内置浏览器:
Mozilla/5.0 (Linux; U; Android 4.2.2; zh-cn; Hol-T00 Build/HUAWEIHol-T00) AppleWebKit/533.1 (KHTML, like Gecko)Version/4.0 MQQBrowser/5.4 TBS/025477 Mobile Safari/533.1 V1_AND_SQ_5.9.1_272_YYB_D QQ/5.9.1.2535 NetType/WIFI WebP/0.3.0 Pixel/720

微信内置浏览器:
Mozilla/5.0 (Linux; U; Android 4.2.2; zh-cn; Hol-T00 Build/HUAWEIHol-T00) AppleWebKit/533.1 (KHTML, like Gecko)Version/4.0 MQQBrowser/5.4 TBS/025478 Mobile Safari/533.1 MicroMessenger/6.3.5.50_r1573191.640 NetType/WIFI Language/zh_CN

手机百度:
Mozilla/5.0 (Linux; U; Android 4.2.2; zh-cn; Hol-T00 Build/HUAWEIHol-T00) AppleWebKit/534.24 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.24 T5/2.0 baiduboxapp/6.9.1 (Baidu; P1 4.2.2)

IOS系统

微信内置浏览器:(iPhone 4S)
Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Mobile/13B143 MicroMessenger/6.3.6 NetType/WIFI Language/zh_CN

手机QQ内置浏览器:(iPhone 4S)
Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Mobile/13B143 MicroMessenger/6.3.6 NetType/WIFI Language/zh_CN

手机QQ内置浏览器:(iPhone plus)
Mozilla/5.0 (iPhone; CPU iPhone OS 8_2 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Mobile/12D508 QQ/5.9.1.405 Pixel/1080 NetType/WIFI Mem/132

手机QQ内置浏览器:(iPhone plus)
Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Mobile/13B143 QQ/5.9.1.405 Pixel/1080 NetType/2G Mem/208

JavaScript和PHP获取后判断信息方法如下:
Continue reading

31

JS函数输出与获取多个返回值(实例)

16

微信支付 V3版

请一定要先看demo

需要申请相应的帐号
后台设置支付目录

js_api_call.php

 

16

PC、移动设备 页面上滚动态加载数据

页面向上滚动到底部后动态加载数据,或者说是页面上拉到达底部后自动加载内容,省去了访客手动点击“下一页”的动作,实为现在所讲的页面人性化设计理念。

像某些网站的瀑布流图片布局,那些图片是动态加载出来的,效果很好,对服务器的压力相对来说也小了很多

还有,使用手机进入qq空间,向上拉动空间,页面到底部时,会动态加载剩余的说说或者是日志

今天我们就来看看他们的实现思路和js控制动态加载的代码

下面的代码主要是控制滚动条下拉(即页面上滚)时的加载事件的

在下面代码说明处,写上操作即可,无论是加载图片还是加载记录数据  都可以

别忘了引用jquery类库 Continue reading

07

JS pageX、clientX、screenX、offsetX、layerX、x

chrome:

e.pageX——相对整个页面的坐标
e.layerX——相对当前坐标系的border左上角开始的坐标
e.offsetX——相对当前坐标系的border左上角开始的坐标
e.clientX——相对可视区域的坐标
e.x——相对可视区域的坐标

ff:

e.pageX——相对整个页面的坐标
e.layerX——相对当前坐标系的border左上角开始的坐标
e.offsetX——无
e.clientX——相对可视区域的坐标
e.x——无 Continue reading

29

常用jQuery方法分类汇总(待续)

jQuery减少了代码的书写量,为前端开发节省了很多时间。有关于JavaScript常用函数请看这里 JavaScript常用函数收集

一、jQuery添加移除CSS类的方法

1 . addClass() – 添加CSS类

$(“#target”).addClass(“newClass”);

//#target 指的是需要添加样式的元素的ID

//newClass 指的是CSS类的名称

2 . removeClass() – 移除CSS类

$(“#target”).removeClass(“oldClass”);

//#target 指的是需要移除CSS类的元素的ID

//oldClass 指的是CSS类的名称

3 . toggleClass() – 添加或者移除CSS类:如果CSS类已经存在,它将被移除;相反,如果CSS类不存在,它将被加上。

$(“#target”).toggleClass(“newClass”);

//如果ID为“target”的元素已经定义了CSS样式,它将被移除;

//反之,CSS类”newClass“将被赋给该ID。

jQuery还提供用来判断某个元素是否已经被赋予某个CSS类的方法,如下:

1 . hasClass()方法是用来检查被选择的元素是否包含指定的class名,其语法:

$(selector).hasClass(“className”);//其中class是必须的值,规定需要在指定元素中查找的类名。

hasClass()也可以同时写多个class但他们之前用空格隔开,如下:

$(selector).hasClass(“className1 className2″);

2 . is()方法也是用来检查被选择的元素是否包含指定的class名,其用法为:

$(selector).is(“.className”);

同样is()也可以有多个类名的写法,如下:

$(selector).is(“.className,.className”);

hasClass()方法与is()方法有同各功能,但hasClass()方法的用时较短,所以说hasClass()方法在性能上是优于is()方法的。
Continue reading