JS语法标亮源码: lJSColoration_src.js
[ 2010-01-23 by ScriptPower ]
重写了下对JavaScript语法解析的代码,现已能准确区分正则与除法,并对正则进行标亮。
目前已经实现对以下元素进行语法标亮:
>> 单行、多行字符串
>> 单行、多行注释
>> 正则表达式
>> JavaScript保留关键字(词库待补充完善)
>> JavaScript对象常用方法(词库待补充完善)
语法案例标亮测试:
http://www.cnlei.com/blog/article.asp?id=565
jQuery v1.3.1 标亮测试:
http://www.cnlei.com/blog/article.asp?id=567
压力测试结果:
-------------------
测试文件:ext-all-debug.js
文件大小:2.28 MB (2,397,109 字节)
-------------------
在各浏览器下压力测试结果:
IE 8 : 运行缓慢,提示是否停止执行
Firefox : 用时4131毫秒
Chrome 4 : 用时1164毫秒
Opera 10 : 用时9359毫秒
Safari 4 : 用时1281毫秒
-------------------
测试机器配置:
ThinkPAD T400, Intel(R) Core(TM)2 Duo CPU P8400 @ 2.26GHz, 791MHz, 1.98GB内存
实现源码如下:
阅读全文...
目前已经实现对以下元素进行语法标亮:
>> 单行、多行字符串
>> 单行、多行注释
>> 正则表达式
>> JavaScript保留关键字(词库待补充完善)
>> JavaScript对象常用方法(词库待补充完善)
语法案例标亮测试:
http://www.cnlei.com/blog/article.asp?id=565
jQuery v1.3.1 标亮测试:
http://www.cnlei.com/blog/article.asp?id=567
压力测试结果:
-------------------
测试文件:ext-all-debug.js
文件大小:2.28 MB (2,397,109 字节)
-------------------
在各浏览器下压力测试结果:
IE 8 : 运行缓慢,提示是否停止执行
Firefox : 用时4131毫秒
Chrome 4 : 用时1164毫秒
Opera 10 : 用时9359毫秒
Safari 4 : 用时1281毫秒
-------------------
测试机器配置:
ThinkPAD T400, Intel(R) Core(TM)2 Duo CPU P8400 @ 2.26GHz, 791MHz, 1.98GB内存
实现源码如下:
/*
lJSColoration.src.js:完整注释版(约10.8KB)
*/
if(typeof(window["lJSF"])=="undefined"){
window["lJSF"]={
Version :"2.5.2<std_lv_n_00>",
Author :"CN.LEI",
EMail :"scriptpower@qq.com",
Website :"http://www.cnlei.com"
};}
lJSF.obj={};
lJSF.obj.JSParser={};
/*
* lJSParser : Little JavaScript Parser v2.0
****************************************************
* Author : CN.LEI
...lJSColoration.src.js:完整注释版(约10.8KB)
*/
if(typeof(window["lJSF"])=="undefined"){
window["lJSF"]={
Version :"2.5.2<std_lv_n_00>",
Author :"CN.LEI",
EMail :"scriptpower@qq.com",
Website :"http://www.cnlei.com"
};}
lJSF.obj={};
lJSF.obj.JSParser={};
/*
* lJSParser : Little JavaScript Parser v2.0
****************************************************
* Author : CN.LEI
阅读全文...
JS语法标亮测试二:jQuery v1.3.1
[ 2010-01-23 by ScriptPower ]
jQuery JavaScript Library v1.3.1
阅读全文...
/*!
* jQuery JavaScript Library v1.3.1
* http://jquery.com/
*
* Copyright (c) 2009 John Resig
* Dual licensed under the MIT and GPL licenses.
* http://docs.jquery.com/License
*
* Date: 2009-01-21 20:42:16 -0500 (Wed, 21 Jan 2009)
* Revision: 6158
*/
(function(){
var
// Will speed up references to window, and allows munging its name.
window = this,
// Will speed up references to undefined, and allows munging its name.
undefined,
// Map over jQuery in case of overwrite
_jQuery = window.jQuery,
// Map over the $ in case of overwrite
_$ = window.$,
jQuery = window.jQuery = window.$ = function( selector, context ) {
// The jQuery object is actually just the init constructor 'enhanced'
return new jQuery.fn.init( selector, context );
},
// A simple way to check for HTML strings or ID strings
// (both of which we optimize for)
quickExpr = /^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/,
// Is it a simple selector
isSimple = /^.[^:#\[\.,]*$/;
...* jQuery JavaScript Library v1.3.1
* http://jquery.com/
*
* Copyright (c) 2009 John Resig
* Dual licensed under the MIT and GPL licenses.
* http://docs.jquery.com/License
*
* Date: 2009-01-21 20:42:16 -0500 (Wed, 21 Jan 2009)
* Revision: 6158
*/
(function(){
var
// Will speed up references to window, and allows munging its name.
window = this,
// Will speed up references to undefined, and allows munging its name.
undefined,
// Map over jQuery in case of overwrite
_jQuery = window.jQuery,
// Map over the $ in case of overwrite
_$ = window.$,
jQuery = window.jQuery = window.$ = function( selector, context ) {
// The jQuery object is actually just the init constructor 'enhanced'
return new jQuery.fn.init( selector, context );
},
// A simple way to check for HTML strings or ID strings
// (both of which we optimize for)
quickExpr = /^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/,
// Is it a simple selector
isSimple = /^.[^:#\[\.,]*$/;
阅读全文...
JS语法标亮测试一:语法测试
[ 2010-01-18 by ScriptPower ]
语法测试案例:
阅读全文...
var num=a / /**除法中的释注1**//reg// /**除法中的释注2**/2;
var str='引号'//紧跟在引号后的注释
var str="引号"//紧跟在引号后的注释
/**释注**///紧跟在多行注释后的单行释注
var num=/reg//2/*注释夹杂在除法当中*//2/3/5/6/*注释夹杂在除法当中*//7/8/9;
var reg=/reg///我是紧跟在正则后的注释
var num=/**释注**//reg// /**除号的行注释**/2;
var num=/reg/ / /reg/; //正则除以正则
/*******************************************/
var num=/reg//2/*注释夹杂在除法当中*//2/3/5/6/*注释夹杂在除法当中*//7/8/9;
var reg=/reg///我是紧跟在正则后的注释
var str="绰号"//紧跟在引号后的注释
/**释注**///释注
var xxx=/**释注**//reg// /**除号的行注释**/2;
var num=/reg/ / /reg/ / 2;
//单行注释
/* 多行注释 */
var toString = Object.prototype.toString ;
var valueOf = Object.prototype.valueOf ;
var xxx=null;
var s="";
var reg=/\//g;
var reg=/\///2/*注释*//3/4/5;
/******************* 字符串 *******************/
var a='单引号';
var b='xxx\'xxx\'xxx"xxx"xxxx';
var d="双引号";
var c='+"+"+'+'+\'+\'+'+'+';
var sss="xxx\
xxx\
xxx\
xxx";
var yyy=ss+'xxx\
xxx\
xxx\
xxx';
/******************* 字符串 end *******************/
/******************* 正则 *******************/
...var str='引号'//紧跟在引号后的注释
var str="引号"//紧跟在引号后的注释
/**释注**///紧跟在多行注释后的单行释注
var num=/reg//2/*注释夹杂在除法当中*//2/3/5/6/*注释夹杂在除法当中*//7/8/9;
var reg=/reg///我是紧跟在正则后的注释
var num=/**释注**//reg// /**除号的行注释**/2;
var num=/reg/ / /reg/; //正则除以正则
/*******************************************/
var num=/reg//2/*注释夹杂在除法当中*//2/3/5/6/*注释夹杂在除法当中*//7/8/9;
var reg=/reg///我是紧跟在正则后的注释
var str="绰号"//紧跟在引号后的注释
/**释注**///释注
var xxx=/**释注**//reg// /**除号的行注释**/2;
var num=/reg/ / /reg/ / 2;
//单行注释
/* 多行注释 */
var toString = Object.prototype.toString ;
var valueOf = Object.prototype.valueOf ;
var xxx=null;
var s="";
var reg=/\//g;
var reg=/\///2/*注释*//3/4/5;
/******************* 字符串 *******************/
var a='单引号';
var b='xxx\'xxx\'xxx"xxx"xxxx';
var d="双引号";
var c='+"+"+'+'+\'+\'+'+'+';
var sss="xxx\
xxx\
xxx\
xxx";
var yyy=ss+'xxx\
xxx\
xxx\
xxx';
/******************* 字符串 end *******************/
/******************* 正则 *******************/
阅读全文...
iPhone 声音的奇怪问题: 只有免提或耳机半插入时有声
[ 2009-05-30 by CNLEI ]
只有在以下几种情况下才有声音,其它情况下均无声
>> 设置的闹钟能正常提示, 有铃声
>> 拨打电话时,只有在免提状态下,扬声器有声音
>> 在"设置-> 声音->铃声"里切换不同铃声时,扬声器有声音
>> 耳机在完全插入状态下,耳机/扬声器都没有声音;
耳机在半插入状态下(即耳机插孔未完全插入最底层),扬声器有声音,耳机本身却没有声音 (并且要找准这个接触点比较麻烦,只有在打开ipod时,不断地调整耳机插入的接触位置,当发现直到 ipod音量提示条的状态变化了后,才会出现声音器有声音).
已经尝试过以下操作,但仍未解决声音问题
>> 左侧的静音键按钮没有显示红点(即非静音状态);
>> 重启iphone和"设置-通用-还原-还原所有设置" 都试了;
>> 按"http://www.weiphone.com/thread-80959-1-1.html" 这篇贴子所提示的方法操作了,还是无法解决.
其它说明:
>> iphone系统版本为: 1.1.2
>> 昨天穿衣裤时, iphone从裤兜里滑了出来掉在了地上,地面为地板瓷砖, 高度约为0.5米. (但愿不是因为从这半米左右的高度摔了一下而引起的;如果真是这样,那iphone的搞摔能力就太弱了-_-)
>> 设置的闹钟能正常提示, 有铃声
>> 拨打电话时,只有在免提状态下,扬声器有声音
>> 在"设置-> 声音->铃声"里切换不同铃声时,扬声器有声音
>> 耳机在完全插入状态下,耳机/扬声器都没有声音;
耳机在半插入状态下(即耳机插孔未完全插入最底层),扬声器有声音,耳机本身却没有声音 (并且要找准这个接触点比较麻烦,只有在打开ipod时,不断地调整耳机插入的接触位置,当发现直到 ipod音量提示条的状态变化了后,才会出现声音器有声音).
已经尝试过以下操作,但仍未解决声音问题
>> 左侧的静音键按钮没有显示红点(即非静音状态);
>> 重启iphone和"设置-通用-还原-还原所有设置" 都试了;
>> 按"http://www.weiphone.com/thread-80959-1-1.html" 这篇贴子所提示的方法操作了,还是无法解决.
其它说明:
>> iphone系统版本为: 1.1.2
>> 昨天穿衣裤时, iphone从裤兜里滑了出来掉在了地上,地面为地板瓷砖, 高度约为0.5米. (但愿不是因为从这半米左右的高度摔了一下而引起的;如果真是这样,那iphone的搞摔能力就太弱了-_-)
实例:arguments.callee的应用
[ 2009-04-09 by CNLEI ]
function f(x){
alert(x);
return arguments.callee;
}
f(0)(1)(2)(3)(4)(5)(6)(7)(8)(9);
alert(x);
return arguments.callee;
}
f(0)(1)(2)(3)(4)(5)(6)(7)(8)(9);
function f(){
var a=arguments,i,l=a.length;
for(i=0; i<l;i++){
alert(a[i]);
}
return arguments.callee;
}
f(0)(1,2)(3,4,5)(6,7,8,9);
var a=arguments,i,l=a.length;
for(i=0; i<l;i++){
alert(a[i]);
}
return arguments.callee;
}
f(0)(1,2)(3,4,5)(6,7,8,9);
[分享]2009年驾驶员交通安全法规考试练习(iPhone版)
[ 2009-03-30 by CNLEI ]
和同事同学一起报了周末班学车,同学花了10块大洋买了张模拟题光盘,但一张光盘只能在两台电脑上注册安装.安装了后,才发现软件制作得非常烂,操作极不方便.
帮助文件中提示说,只能使用小键盘数字键来输入;而笔记本的数字开启后,它竟然不能识别.于是打开它的安装目录打到里面的数据库文件,把数据导出来,自己做了个iphone版的交规考试练习.
在线iphone版:
http://www.cnlei.com/c1/
如果你的iphone装了apache的话,可以下载下面的压缩包文件:
http://www.cnlei.com/c1/DriverTest.rar
解压后放到下面这个目录:
/var/root/sites/c1/ (注: c1 为自建子文件夹)
然后可使用Safari通过下述地址访问练习:
http://127.0.0.1/c1/
帮助文件中提示说,只能使用小键盘数字键来输入;而笔记本的数字开启后,它竟然不能识别.于是打开它的安装目录打到里面的数据库文件,把数据导出来,自己做了个iphone版的交规考试练习.
在线iphone版:
http://www.cnlei.com/c1/
如果你的iphone装了apache的话,可以下载下面的压缩包文件:
http://www.cnlei.com/c1/DriverTest.rar
解压后放到下面这个目录:
/var/root/sites/c1/ (注: c1 为自建子文件夹)
然后可使用Safari通过下述地址访问练习:
http://127.0.0.1/c1/
资料:关于document.createDocumentFragment()
[ 2009-03-24 by CNLEI ]
documentFragment 是一個無父對象的document對象.
他支持以下DOM2方法:
appendChild, cloneNode, hasAttributes, hasChildNodes, insertBefore, normalize, removeChild, replaceChild.
也支持以下DOM2屬性:
attributes, childNodes, firstChild, lastChild, localName, namespaceURI, nextSibling, nodeName, nodeType, nodeValue, ownerDocument, parentNode, prefix, previousSibling, textContent.
其他方法可以將documentFragment 作為一個參數,(比如Node的 appendChild和insertBefore 方法),這樣,fragment 就可以被追加到父對象中。
Example:
===========================================
document.createDocumentFragment()说白了就是为了节约使用DOM。每次JavaScript对DOM的操作都会改变页面的变现,并重新刷新整个页面,从而消耗了大量的时间。为解决这个问题,可以创建一个文档碎片,把所有的新节点附加其上,然后把文档碎片的内容一次性添加到document中。
阅读全文...
他支持以下DOM2方法:
appendChild, cloneNode, hasAttributes, hasChildNodes, insertBefore, normalize, removeChild, replaceChild.
也支持以下DOM2屬性:
attributes, childNodes, firstChild, lastChild, localName, namespaceURI, nextSibling, nodeName, nodeType, nodeValue, ownerDocument, parentNode, prefix, previousSibling, textContent.
其他方法可以將documentFragment 作為一個參數,(比如Node的 appendChild和insertBefore 方法),這樣,fragment 就可以被追加到父對象中。
Example:
var frag = document.createDocumentFragment();
frag.appendChild(document.createTextNode('Ipsum Lorem'));
document.body.appendChild(frag);
frag.appendChild(document.createTextNode('Ipsum Lorem'));
document.body.appendChild(frag);
===========================================
document.createDocumentFragment()说白了就是为了节约使用DOM。每次JavaScript对DOM的操作都会改变页面的变现,并重新刷新整个页面,从而消耗了大量的时间。为解决这个问题,可以创建一个文档碎片,把所有的新节点附加其上,然后把文档碎片的内容一次性添加到document中。
var oui=document.getElementById("oItem");
for(var i=0;i<10;i++)
{
var oli=document.createElement("li");
oui.appendChild(oli);
oli.appendChild(document.createTextNode("Item"+i));
...for(var i=0;i<10;i++)
{
var oli=document.createElement("li");
oui.appendChild(oli);
oli.appendChild(document.createTextNode("Item"+i));
阅读全文...






