推荐几个移动端前端UI框架

SUI Mobile     http://m.sui.taobao.org/components/#popup    SUI Mobile 是一套基于 Framework7 开发的UI库。

MUI            http://dev.dcloud.net.cn/mui/    最接近原生APP体验的高性能前端框架

weUI           https://weui.io/     微信原生框架

Vant           https://youzan.github.io/vant/?source=vuejsorg#/zh-CN/intro     Vue官网合作UI,有赞团队开发

Frozen UI      http://frozenui.github.io/      由腾讯团队开发,适用于使用手Q规范设计的Web页面

Mand Mobile    https://didi.github.io/mand-mobile/#/zh-CN/docs/introduce      Mand Mobile是面向金融场景设计的移动端组件库

Muse – UI      https://muse-ui.org/#/zh-CN/contributing     Muse UI 是一套 Material Design 风格开源组件库,旨在快速搭建页面。

cube – ui      https://didi.github.io/cube-ui/#/zh-CN/docs/introduction     滴滴开源的UI框架 

vonic          https://wangdahoo.github.io/vonic/docs/#/    一个基于 vue.js 和 ionic 样式的 UI 框架,用于快速构建移动端单页应用。

vux            https://vux.li/        vux 基于WeUI和Vue(2.x)开发的移动端UI组件库

Mint UI        http://mint-ui.github.io/#!/zh-cn     Mint UI 由饿了么前端团队推出的 Mint UI 是一个基于 Vue.js 的移动端组件库          

专利搜索网站SooPAT

http://www.soopat.com/

感情最怕的就是你认真了,对方却只是暧昧一场,搞笑的是,他撩你全程靠嘴,而你却因此走了心了。

Fiddler实现手机抓包——小白入门

https://blog.csdn.net/gld824125233/article/details/52588275

http://www.downza.cn/soft/234727.html

http://www.downza.cn/download/234727?module=soft&id=234727&token=b595811ff25ae45f149b6f5f805862ba&isxzq=0
重定向 http://pc.71apk.com/2017/07/Fiddler_4.6.20171.26113.exe
引用页 http://www.downza.cn/soft/234727.html

星盟小程序


http://mmbiz.qpic.cn/mmbiz_jpg/QELQk55xouqK5kSJePamNDicKl4DcziaicJn39lUkmqWIkT2Ibib32dwKTUmqib4TNoGw6cegY2T9BANznpnEkfoZsQ/0

tp5分页参数 thinkphp5分页传参数

->paginate(1,false,[‘query’ => request()->param()]);

我是一个爬虫

诞生

我是一个Web Crawler , 有时候称为Spider , 你们经常说的爬虫就是我。

我想我是遇到了好时代,感谢IT政府,提供了简单的HTTP协议,还有HTML,CSS, JavaScript这一系列开放的技术, 原来的桌面应用,局域网应用都被搬到了网络上,形成了一个个的网站, 网站互联起来,形成了一个覆盖全世界的大网。

阅读详细 »

如何用js替换文本里的换行符 \n?

有下面一段文本, 在编辑器里的格式如下:

<div id="foo">
line1
line2
line3
</div>

切换到浏览器, 显示如下

line1line2line3

这里我想使浏览器显示效果变成如下形式

line1
line2
line3

编辑器里回车产生的换行符\n是不可见的, 这里我们用js把\n替换为<br>

尝试如下代码:

var txt=$('#id').html();
txts=txts.replace('\n','<br>')
$('.wra').html(txts);

无效, 因为replace()方法只替换匹配到的第一个字符

如下为正确代码:

var txts = $('.wra').html();
txts=txts.replace(/\n/g,'<br>')
$('.wra').html(txts);

使用带有g标识的正则, 可以搜索并替换所有匹配的字符

值得一提的是, 换行符因为操作系统不同会有差异, 因此使用下面的方法更加安全:

var txts = $('.wra').html();
txts=txts.replace(/[\n\r]/g,'<br>')
$('.wra').html(txts);

					

在线二维生成接口

http://www.liantu.com/pingtai/

微信小程序自定义组件wxss不生效,如何解决???

使用微信web开发工具开发微信小程序 自定义组件时。组件的 wxss 样式 不生效,很头疼。如何解决???

自定义的组件wxss不生效如何解决?
1.在开发者工具调试器中输入openVendor并回车;
2.开发者工具会打开一个文件夹,请删除这个文件夹下的所有文件;
3.关闭并重启开发者工具,看看这个问题是否还存在。

Fiddler实现手机抓包

手机用fiddler抓包

电脑最好是笔记本,这样能和手机保持统一局域网内;其他不多说,直接说步骤了。

一.对PC(笔记本)参数进行配置

   1. 配置fiddler允许监听到https(fiddler默认只抓取http格式的)

         打开Fiddler菜单项Tools->TelerikFiddler Options->HTTPS

         勾选CaptureHTTPS CONNECTs,点击Actions,

         勾选Decrypt HTTPS trafficIgnore servercertificate errors两项,点击OK(首次点击会弹出是否信任fiddler证书和安全提示,直接点击yes就行),见图:

阅读详细 »

mysql 多表关联删除 MySQL跨表关联删除 MySQL根据查询条件删除多表数据

两张表关联删除:

DELETE a,b FROM table1 a
INNER JOIN  table2 b
ON a.id = b.aid
WHERE a.id = '1'
//或者也可以
DELETE a,b FROM table1 a,table2 b
WHERE a.id = b.aid
AND a.id = '1'
 阅读详细 »

MySQL 设置数据按条件查询下的序号

ALTER TABLE mytable ADD forder INT DEFAULT 0;

UPDATE mytable r,(
    SELECT a.fid,(@rownum:=@rownum+1) AS forder
    FROM mytable a,(SELECT @rownum:=0) b
    ORDER BY ftype ASC,fnum ASC
) t
SET r.forder=t.forder
WHERE r.fid =t.fid

https://www.cnblogs.com/yjl49/archive/2012/08/21/2649582.html

商业模式画布是什么?

商业模式画布是会议和头脑风暴的工具,它通常由一面大黑板或干脆一面墙来呈现。这块板子按照一定的顺序被分成九个方格,方格的内容如下::
1)客户细分——你的目标用户群,一个或多个集合
2)价值主张——客户需要的产品或服务,商业上的痛点
3)渠道通路——你和客户如何产生联系,不管是你找到他们还是他们找到你,比如实体店、网店、中介
4)客户关系——客户接触到你的产品后,你们之间应建立怎样的关系,一锤子买卖抑或长期合作
5)收入来源——你将怎样从你提供的价值中取得收益
6)核心资源——为了提供并销售这些价值,你必须拥有的资源,如资金、技术、人才
7)关键业务——商业运作中必须要从事的具体业务
8)重要伙伴——哪些人或机构可以给予战略支持
9)成本结构——你需要在哪些项目付出成本

商业模式画布的优点在于让讨论商业模式的会议变得高效率、可执行,同时产生不止一套的方案,让每个决策者心中留下多种可能性。

https://github.com/FineUploader/fine-uploader

我眼中的“微信小程序”

近期微信不声不响地推送了“微信小程序”,前端圈里铺天盖地的都是这个话题。
我尝试了一下,做了个小demo,由于太小,几乎就是跟着文档刷了一遍而已。所以就不放出截图代码了。
这篇主要说一下我眼中的“微信小程序”
学习 Vue

写代码的时候很明显能感觉到有 vue 的影子。
每个page分到一个文件夹里面,这个文件夹含有至少三个文件:.wxml, .wxss, .js 还有一个可选的.json分别对应的是 DOM 结构, 样式,控制器,配置文件
完完全全就是vue的template语法的拆解版。
这样做的好处是结构特别的清晰,不像jsx一样,不用什么都写.jsx里面,学习成本就变得很低了。
控制器里面也是有些模仿的意思吧。

Page({   

    data: {   

    },   

    onLoad: function(options){   

    }   

})

其实讲道理没什么模仿吧,毕竟js就是这么写的
融合 React
我很明显地在函数中看到了这样的语法:

this.setData({   

    foo: ‘bar’   

})

语法上还是很像的,对吧?
「微信小程序」剖析(二):框架原理 在桌面浏览器上运行的尝试 这篇文章后面有一段讲的是数据变动渲染什么的。说的比较含糊,没看太懂
绑定事件上也比较像react对吧,不过我比较偏爱的是 vue 的语法,很优雅

<button @click=”handle”>click me</button>

还有点儿 Angular2 的味道
只是在页面文件分成几个部分的时候我嗅到了一些Angular2的味道,把dom和style分开,放到自己当前文件夹里。
好吧,这个理由似乎有点儿勉强 🙂
特点
我在写代码的时候,感受到的一个最大的特点就是:简单,真的不需要太多的概念,不需要很复杂的工程就能在微信这么一个可能是全世界最大的流量入口做一个可用的小程序。是不是很激动。
每个页面对应一个文件夹,文件夹里一套微信规定好的东西。页面只要填充上微信做好的组件就可以跑起来了,而且还带支付功能!
它所带来的几个特性:
低成本
学习成本很低,整个模式对于初学者是很友好的,只要了解了 pattern 就能写代码了,也不用写 native。
也不用像 Angular2, React 那样要先学很多概念才能干活。
我甚至想,微信小程序的简单程度可能直逼 jQuery。
所以培训应该会很容易搞,公司招人也不需要太高的要求了,拉进公司学半天就行了。
高收益
微信流量巨大。我之前说过,它可能是全球最大的流量入口了。
关于这一点我想说,微信用户量大总所周知。不仅量大,微信的用户粘度非常强,用户也非常活跃,走在路上很容易看到各种人走两步就刷一下朋友圈,我觉得 Instagram 还没有这么强吧。
流量入口很容易带来高收益,再加上微信支付。我想很多中小型公司,尤其是电商这些的。会很快跟进。
阿里地位岌岌可危。
跨平台
做出的产品写一遍就能跨平台了。包括没什么产品支持的 windows phone 平台
缺点
太简单,无法支撑复杂应用
简单是好事,也是坏事。

微信小应用实在太简单了。甚至连组件化都没有!

也就是说,所有页面要写一些重复的工作才能看起来是一样的。

复杂的表单,强交互的场景把controller写几千行也是很正常的吧。

更没有组件通信。当然了,毕竟连组件都没有。
有好有坏吧,加上组件要考虑的事情就会变得更多,难度自然就上来了。
ES2015+
而且我看的 demo 代码几乎没有用到 ES2015+ 的特性,不过别担心,babel都能转。
不过暂时没有看到 module 是怎么处理的。

就像上面说的,一个文件写几千行?

我对代码略有洁癖,表示不能接受。
审核问题
首先是苹果的审核,会不会不允许微信这么干,IOS 这么一个大平台如果说不同意那这个项目基本就GG了。
对于这个问题我是持乐观态度的。我猜想这个项目进行之前就已经和苹果那边有商量了。而且腾讯的能量还是相当大的,苹果就算不想支持,在博弈之后可能还得慎重考虑。
然后是微信的审核是否过关?
我想微信是都想让大家过的,只是。。。广电总局这样的部门在国内力量似乎很强大嘛。
还有就是那种“屠龙宝刀,点击就送”的应用,会不会很容易放过?
微信政策
我其实很想做微信小程序玩玩的,只是担心会不会只开放给企业用户。

我认为个人开发者才是最勇猛,最激进,最热爱技术的那批人。

我希望能够尽量让更多的人都来开发。

这个问题其实我也是持乐观态度的。

微信可能不愿意开源出来,但是他们肯定很想让所有人都用。
暂时并不能取代客户端
比较尴尬的一点是,微信小程序并不能取代客户端。

一个非常重要的点是功能太弱。很多功能还是需要独立客户端来做的。

另一个,谁甘心并且完全放心把流量入口完全交给其他人呢?说不定一个乱七八糟的政策就能搞死一个产品。
我的态度
我觉得微信小程序是一个非常棒的消息,它可以更简单地做一些轻应用。也会更好玩。
轻应用,交互简单中小企业的可以快速来一套。并尝试重心转移到这里。

重型应用可以让现有的前端花几天撸一个页面,就做展示就好了,别想做很多功能了。
微信小应用可以说一定程度上又推了一把火热的前端。可能会带更多的人踏入前端的大坑了。
然而冷静一点。多少年了,我们一直追寻的跨平台真的能够在微信小程序上得到一定程度的实现吗?
我相信前端一定会越来越好。加油~

Chrome 插件集推荐

在前端这个行业里面,浏览器担任着及其重要的角色。今天我们可以选择的浏览器有很多,Chrome,Firefox,IE,Safari… 为了能获得更佳的开发体验,大家更多地选择 Chrome。今天介绍下我平时安装的那些 Chrome Extensions。

OneTab
当您发现自己有太多的标签页时,单击OneTab图标,将所有标签页转换成一个列表。当您需要再次访问这些标签页时,可以单独或全部恢复它们。
JSONView
JSONView 是一个方便查看 Json 结构的插件,展开,折叠,看接口返回数据就是这么方便。
SnappySnippet
有时候想在 Codepen, JS Bin, jsFiddle 等平台演示 bug 或者装个五毛的 B ,但限于样式拆分得太细,难以抽离,SnappySnippet 可以快速帮你完成这项苦差事。
EditThisCookie
EditThisCookie 是个修改 Cookie 的快捷工具。
Validity
Validity 可以用来快速验证你的 HTMl 文档明显错误,比如少了个结束标签,使用了不规范标签,缺少了某些属性等等。
Responsive Web Design Tester
移动端页面适配利器,使用 Responsive Web Design Tester,你可以快速在目标尺寸上打开页面,可以自己配置尺寸,修改 UserAgent, 整体效果比 Chrome 自带模拟器更赞~
Allow-Control-Allow-Origin: *
JS 同源策略保障我们的页面安全,但是开发期间我们并不想看到这烦人的家伙,使用Allow-Control-Allow-Origin: *插件轻松解决这个问题 Allow-Control-Allow-Origin: *。
Chrome Sniffer Plus
有时候打开某家公司的页面,很好奇人家用了哪些技术库、框架,Chrome Sniffer Plus 可以为你服务。
Clear Cache
快速清除页面缓存?我用 Clear Cache。
Full Page Screen Capture
看到酷炫的页面排版,叹为观止的巧妙设计想保存下来? 使用 Full Page Screen Capture。
LastPass
管理页面密码,省去频繁输入测试账号密码的烦恼,为了安全保障,最好还是不要保存购物网站的密码哟~
Panda 5 | News & Inspiration Dashboard

Panda 的定位是一个非常优秀的资源阅读器。
Octotree
上同性社交网站的时候经常在翻别人源码的时候特别苦恼,特别是你的网络不给力的时候,简直想死,Octotree 帮助你整理出来项目文件列表。
PerfectPixel
这是一个像素级对稿的插件,如果你所在的公司也特别有情怀的话,那么这个软件可以省去大把你和设计师对稿的时间。
Postman
口碑极好的一个接口调试工具,必备神器,不多说,但是你一定要装。
AngularJS Batarang / React Developer Tools / Vue.js devtools
Angular / React / Vue 调试工具。

AngularJS Batarang 

React Developer Tools

Vue.js devtools
Stylish
Stylish 是一个自定义页面外观的工具,比如想去掉 *度 无下限的广告,给它加个 display: none!
User-Agent Switcher for Chrome
切换 User Agent 的插件。
Web Server for Chrome
快速启动小项目或Demo的神器。
一键管理所有扩展
插件装多了,不好管理? 启动慢? 好好管教管教。
广告终结者
跟烦人的广告说再见,还你一个干净有情怀的页面。
页面自动刷新
定时刷新页面,我还记得当初用它抢到一个 小米2s。
掘金
(不是广告,不是广告,不是广告,至少我没有收钱)
掘金是中国质量最高的技术分享社区,邀请稀土用户作为 Co-Editor 来分享优质的技术干货,从前端到后端开发,从设计到产品,让每一个掘金用户都能挖掘到有价值的干货。
上面的插件大部分都没有中文版,而且 Chrome 本来也在墙外,如果你发现自己打不开上面那些链接的话,趁这个机会出个墙吧。
你有什么好插件?
(工具始终都只是辅助,但是装优秀的插件可以提高开发效率。)
给你一个全新的 Chrome 你会优先装什么工具?你有什么好玩意儿在推荐推荐。

VMware USB Arbitration Service 无法启动的解决方案

VMware USB Arbitration Service 无法启动的解决方案
 
问题描述:常用VMware 虚拟机的童鞋们有事应该遇到这种情况,就是装完
VMware,启动时VMware 下面会有个黄框中有”USB disabled…”之类的提示。
当在虚拟机里装完系统后,一切皆正常。除了插入USB 设备不设别外!到本地电
脑的服务里面查看VMware 的USB 服务时,显示的是”自动”,但是却没有自动
启动,手动启动的时候提示”VMware USB Arbitration Service 无法启动,出
现错误31:连接到系统上的设备没有发挥作用”,重装虚拟机乃至重装电脑都
不能解决问题,是不是非常抓狂啊!?下面我就给出解决方案!
问题原因:AMD 主板驱动的在搞怪。
问题解决:卸载AMD 主板驱动的USB 过滤器。
具体方法:
方法一:
1. 进入Windows 的控制面板中的”添加删除程序”
2. 找到”ATI Catalyst Install Manager”,右击选择更改
3. 选择下一步
4.选择”卸载管理器”,然后选择下一步
5. 选择自定义,然后选择下一步
6. 随后会出来三个选项,在”选择要卸载的组件”之中,选中”USB 过滤器”
7. 最后,一路下一步下载后就OK 啦。然后到系统服务下面手动启动VMware
的USB 看看,是不是可以正常启动啦!
 
方法二:
开始——运行——输入regedit 来打开Windows 注册表,找到:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Class\{36FC9E60-C
465-11CF-8056-444553540000}.
删除UpperFilter 的值。
 
找到:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\
删除usbfilter。 (不过这一步也可不做)
删除 %system32%\drivers\usbfilter.sys
重启系统后应该就OK 了。
 
方法三:
问题 :启动 VMware USB Arbitration Service 服务时提示:错误 31:连接到
系统上的设备没有发挥作用
现象 :VMWare 内不能识别 USB 设备。启动 VMware USB Arbitration Service
服务时提示:错误31:连接到系统上的设备没有发挥作用。
确认 :通过事件查看器可以看到内容形如”Detected unrecognized USB driver
(/Driver/seehcri).”的警告信息,在Windows/System32/Drivers 目录下可以
找到seehcri.sys 文件
原因 :安装索爱PC Suite 之后,seehcri.sys 会替换系统中原有的USB 驱动,
卸载PC Suite 不会卸载seehcri.sys
解决 :下载AutoRuns for Windows v8.61,解压运行autoruns.exe,在Drivers
页找到seehcri.sys,删除。重启系统,进入设备管理器,删除打黄色叹号的USB
设备,扫描硬件改动,重新安装驱动程序。

一张图,看懂七亿中国网民生存现状!

2015年,中国互联网用户已达6.89亿,其中手机网民5.57亿,人均周上网时长升至26.1小时!就像王思聪为娱乐圈操碎了心,中国网民为全世界操碎了心,这庞大的族群都在做啥?一张图看懂!
   
   

你可能不知道的10个JavaScript小技巧

尽管我使用Javascript来做开发有很多年了,但它常有一些让我很惊讶的小特性。对于我来说,Javascript是需要持续不断的学习的。在这篇文章中,我将列出10个Javascript使用小技巧,主要面向Javascript新手和中级开发者。希望每个读者都能至少从中学到一个有用的技巧。
1.变量转换
看起来很简单,但据我所看到的,使用构造函数,像Array()或者Number()来进行变量转换是常用的做法。始终使用原始数据类型(有时也称为字面量)来转换变量,这种没有任何额外的影响的做法反而效率更高。

var myVar = “3.14159”,

str = “”+ myVar,// to string

int = ~~myVar, // to integer

float = 1*myVar, // to float

bool = !!myVar, /* to boolean – any string with length

and any number except 0 are true */

array = [myVar]; // to array

转换日期(new Date(myVar))和正则表达式(new RegExp(myVar))必须使用构造函数,而且创建正则表达式的时候要使用/pattern/flags的形式。
2.十进制转换为十六进制或者八进制,或者反过来
你是不是写个单独的函数来转换十六进制(或者八进制)呢?马上停下吧!有更容易的现成的函数可以用:

(int).toString(16); // converts int to hex, eg 12 => “C”

(int).toString(8); // converts int to octal, eg. 12 => “14”

parseInt(string,16) // converts hex to int, eg. “FF” => 255

parseInt(string,8) // converts octal to int, eg. “20” => 16

3.玩转数字
除了上一节介绍的之外,这里有更多的处理数字的技巧

0xFF; // Hex declaration, returns 255

020; // Octal declaration, returns 16

1e3; // Exponential, same as 1 * Math.pow(10,3), returns 1000

(1000).toExponential(); // Opposite with previous, returns 1e3

(3.1415).toFixed(3); // Rounding the number, returns “3.142”

4.Javascript版本检测
你知道你的浏览器支持哪一个版本的Javascript吗?如果不知道的话,去维基百科查一下Javascript版本表吧。出于某种原因,Javascript 1.7版本的某些特性是没有得到广泛的支持。不过大部分浏览器都支持了1.8版和1.8.1版的特性。(注:所有的IE浏览器(IE8或者更老的版本)只支持1.5版的Javascript)这里有一个脚本,既能通过检测特征来检测JavaScript版本,它还能检查特定的Javascript版本所支持的特性。

var JS_ver = [];

(Number.prototype.toFixed)?JS_ver.push(“1.5”):false;

([].indexOf && [].forEach)?JS_ver.push(“1.6”):false;

((function(){try {[a,b] = [0,1];return true;}catch(ex) {return false;}})())?JS_ver.push(“1.7”):false;

([].reduce && [].reduceRight && JSON)?JS_ver.push(“1.8”):false;

(“”.trimLeft)?JS_ver.push(“1.8.1″):false;

JS_ver.supports = function()

{

if (arguments[0])

return (!!~this.join().indexOf(arguments[0] +”,”) +”,”);

else

return (this[this.length-1]);

}

alert(“Latest Javascript version supported: “+ JS_ver.supports());

alert(“Support for version 1.7 : “+ JS_ver.supports(“1.7”));

5.使用window.name进行简单会话处理
这个是我真的喜欢的东西。您可以为指定一个字符串作为window.name属性的值,直到您关闭该标签或窗口。虽然我没有提供任何脚本,但我强烈建议您如充分利用这个方法。举例来说,在建设一个网站或应用程序的时候,在调试和测试模式之间切换是非常有用的。
6.判断属性是否存在
这个问题包含两个方面,既有检查属性时候存在,还要获取属性的类型。但我们总是忽略了这些小事情:

// BAD: This will cause an error in code when foo is undefined

if (foo) {

doSomething();

}

// GOOD: This doesn’t cause any errors. However, even when

// foo is set to NULL or false, the condition validates as true

if (typeof foo != “undefined”) {

doSomething();

}

// BETTER: This doesn’t cause any errors and in addition

// values NULL or false won’t validate as true

if (window.foo) {

doSomething();

}

但是,有的情况下,我们有更深的结构和需要更合适的检查的时候,可以这样:

// UGLY: we have to proof existence of every

// object before we can be sure property actually exists

if (window.oFoo && oFoo.oBar && oFoo.oBar.baz) {

doSomething();

}

7.给函数传递参数
当函数既有必选又有可选参数的时候,我们可能是这样做的:
function doSomething(arg0, arg1, arg2, arg3, arg4) {

}

doSomething(”, ‘foo’, 5, [], false);

而传递一个对象总是比传递一堆的参数更方便:

function doSomething() {

// Leaves the function if nothing is passed

if (!arguments[0]) {

return false;

}

var oArgs = arguments[0]

arg0 = oArgs.arg0 || “”,

arg1 = oArgs.arg1 || “”,

arg2 = oArgs.arg2 || 0,

arg3 = oArgs.arg3 || [],

arg4 = oArgs.arg4 || false;

}

doSomething({

arg1 : “foo”,

arg2 : 5,

arg4 : false

});

这只是一个把对象作为参数传递的一个很简单的例子,例如,我们还可以声明一个对象,变量名作为Key,默认值作为Value。
8.使用document.createDocumentFragment()
您可能需要动态地追加多个元素到文档中。然而,直接将它们插入到文档中会导致这个文档每次都需要重新布局一个,相反的,你应该使用文档碎片,建成后只追加一次:

function createList() {

var aLI = [“first item”, “second item”, “third item”,

“fourth item”, “fith item”];

// Creates the fragment

var oFrag = document.createDocumentFragment();

while (aLI.length) {

var oLI = document.createElement(“li”);

// Removes the first item from array and appends it

// as a text node to LI element

oLI.appendChild(document.createTextNode(aLI.shift()));

oFrag.appendChild(oLI);

}

document.getElementById(‘myUL’).appendChild(oFrag);

}

9.为replace()方法传递一个函数
有的时候你想替换字符串的某个部分为其它的值,最好的方法就是给String.replace()传递一个独立的函数。下面是一个简单例子:

var sFlop = “Flop: [Ah] [Ks] [7c]”;

var aValues = {“A”:”Ace”,”K”:”King”,7:”Seven”};

var aSuits = {“h”:”Hearts”,”s”:”Spades”,

“d”:”Diamonds”,”c”:”Clubs”};

sFlop = sFlop.replace(/\[\w+\]/gi, function(match) {

match = match.replace(match[2], aSuits[match[2]]);

match = match.replace(match[1], aValues[match[1]] +” of “);

return match;

});

// string sFlop now contains:

// “Flop: [Ace of Hearts] [King of Spades] [Seven of Clubs]”

10.循环中标签的使用
有的时候,循环中又嵌套了循环,你可能想在循环中退出,则可以用标签:

outerloop:

for (var iI=0;iI<5;iI++) {

if (somethingIsTrue()) {

// Breaks the outer loop iteration

break outerloop;

}

innerloop:

for (var iA=0;iA<5;iA++) {

if (somethingElseIsTrue()) {

// Breaks the inner loop iteration

break innerloop;

}

}

}