统计jQuery中各字符串出现次数的工具


Posted in Javascript onMay 03, 2012
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=gb2312"/> 
<title>工具:统计jQuery中各字符串出现次数</title> 
<script src="http://demo.3water.com/jslib/jquery/jquery.js" type="text/javascript"></script> 
</head> 
<body> 
<p>源文件(将jQuery源码复制到下面的文本域):</p> 
<p><textarea id="myjquery" style="width: 510px; height: 250px; padding: 2px;">..</textarea></p> 
<p><input id="mybtn2" style="position: relative; left: 349px;" type="button" value="统计所有字符串出现次数" /></p> 
<div id="myshow2" style="width: 500px; height: 250px; border: 1px dotted #8B8D72; overflow: auto; padding: 5px;"> </div> 
<p> </p> 
<p><label for="myinput">字符串:<input id="myinput" type="text" /> <input id="mybtn1" style="position: relative; left: 130px;" type="button" value="统计单个字符串出现次数" 
/> </label></p> 
<div id="myshow1" style="width: 500px; height: 100px; border: 1px dotted #8B8D72; overflow: auto; padding: 5px;"> </div> 
<p> </p> 
<p>点击“统计所有字符出现次数”按钮后发现,字符串“string”竟然出现了44次,多数是诸如以下的代码</p> 
<div class="cnblogs_Highlighter"> 
<pre class="brush:javascript;gutter:true;">typeof selector === "string" 
typeof data !== "string" 
type === "string" 
typeof context === "string" 
getByName = typeof name === "string" 
// ... 
</pre> 
</div> 
<p></p> 
<p>如果使用一个变量替换,使用工具压缩时将会进一步减少文件的大小。</p> 
<p> </p> 
<p> </p> 
<script type="text/javascript">// <![CDATA[ 
setTimeout(function(){ 
function buildRe(keywords) { 
var rObj = {}; 
if (keywords.constructor !== Array) { 
return; 
} 
keywords.forEach(function(it) { 
rObj[it] = RegExp(''+it, 'g'); 
}); 
return rObj; 
} 
function count(rObj, source, callback, sortType) { 
var r, 
rarr, 
num, 
type, 
func, 
result = []; 
var subCount = function(arr) { 
var i, re, num, resu; 
i = num = 0; 
for (i; i<arr.length; i++) { 
re = arr[i]; 
while( (resu=re.exec(source)) != null ) { 
num++; 
} 
} 
return num; 
}; 
for (type in rObj) { 
rarr = rObj[type]; 
if (rarr.constructor !== Array) { 
rarr = [rarr]; 
} 
num = subCount(rarr); 
result.push({type: type, num: num}); 
} 
// sort 0:次数顺序 1:次数倒序 
if (typeof sortType !== 'undefined') { 
if (sortType===0) { 
func = function(a, b) { 
return a.num - b.num; 
}; 
} else if (sortType===1) { 
func = function(a, b) { 
return b.num - a.num; 
}; 
} 
result.sort(func); 
} 
callback(result); 
} 
function main(keywords, source, callback, sortType) { 
var rObj = keywords.constructor === Array ? buildRe(keywords) : keywords; 
count(rObj, source, callback, sortType); 
} 
var rObj = { 
string: [/\'string\'/g, /\"string\"/g], 
number: [/\'number\'/g, /\"number\"/g], 
'boolean': [/\'boolean\'/g, /\"boolean\"/g], 
object: [/\'object\'/g, /\"object\"/g], 
'undefined': [/\'undefined\'/g, /\"undefined\"/g], 
'function': [/\'function\'/g, /\"function\"/g], 
'array': [/\'array\'/g, /\"array\"/g], 
'ready': [/\'ready\'/g, /\"ready\"/g], 
input: [/\'input\'/g, /\"input\"/g], 
type: [/\'type\'/g, /\"type\"/g], 
text: [/\'text\'/g, /\"text\"/g], 
radio: [/\'radio\'/g, /\"radio\"/g], 
checkbox: [/\'checkbox\'/g, /\"checkbox\"/g], 
password: [/\'password\'/g, /\"password\"/g], 
submit: [/\'submit\'/g, /\"submit\"/g], 
button: [/\'button\'/g, /\"button\"/g], 
id: [/\'id\'/g, /\"id\"/g], 
div: [/\'div\'/g, /\"div\"/g], 
body: [/\'body\'/g, /\"body\"/g], 
html: [/\'html\'/g, /\"html\"/g], 
HTML: [/\'HTML\'/g, /\"HTML\"/g], 
parentNode: [/\'parentNode\'/g, /\"parentNode\"/g], 
nextSibling: [/\'nextSibling\'/g, /\"nextSibling\"/g], 
iframe: [/\'iframe\'/g, /\"iframe\"/g], 
before: [/\'before\'/g, /\"before\"/g], 
after: [/\'after\'/g, /\"after\"/g], 
script: [/\'script\'/g, /\"script\"/g], 
width: [/\'width\'/g, /\"width\"/g], 
height: [/\'height\'/g, /\"height\"/g], 
top: [/\'top\'/g, /\"top\"/g], 
left: [/\'left\'/g, /\"left\"/g], 
absolute: [/\'absolute\'/g, /\"absolute\"/g], 
relative: [/\'relative\'/g, /\"relative\"/g], 
'static': [/\'static\'/g, /\"static\"/g], 
fixed: [/\'fixed\'/g, /\"fixed\"/g], 
href: [/\'href\'/g, /\"href\"/g], 
border: [/\'border\'/g, /\"border\"/g], 
margin: [/\'margin\'/g, /\"margin\"/g], 
marginTop: [/\'marginTop\'/g, /\"marginTop\"/g], 
marginBottom: [/\'marginBottom\'/g, /\"marginBottom\"/g], 
marginLeft: [/\'marginLeft\'/g, /\"marginLeft\"/g], 
marginRight: [/\'marginRight\'/g, /\"marginRight\"/g], 
padding: [/\'padding\'/g, /\"padding\"/g], 
paddingTop: [/\'paddingTop\'/g, /\"paddingTop\"/g], 
paddingLeft: [/\'paddingLeft\'/g, /\"paddingLeft\"/g], 
paddingRight: [/\'paddingRight\'/g, /\"paddingRight\"/g], 
display: [/\'display\'/g, /\"display\"/g], 
olddisplay: [/\'olddisplay\'/g, /\"olddisplay\"/g], 
none: [/\'none\'/g, /\"none\"/g], 
hidden: [/\'hidden\'/g, /\"hidden\"/g], 
inline: [/\'inline\'/g, /\"inline\"/g], 
opacity: [/\'opacity\'/g, /\"opacity\"/g], 
show: [/\'show\'/g, /\"show\"/g], 
hide: [/\'hide\'/g, /\"hide\"/g], 
toggle: [/\'toggle\'/g, /\"toggle\"/g], 
json: [/\'json\'/g, /\"json\"/g], 
success: [/\'success\'/g, /\"success\"/g], 
fxshow: [/\'fxshow\'/g, /\"fxshow\"/g], 
fx: [/\'fx\'/g, /\"fx\"/g], 
'.run': [/\'.run\'/g, /\".run\"/g], 
'http:': [/\'http:\'/g, /\"http:\"/g], 
error: [/\'error\'/g, /\"error\"/g], 
abort: [/\'abort\'/g, /\"abort\"/g], 
GET: [/\'GET\'/g, /\"GET\"/g], 
POST: [/\'POST\'/g, /\"POST\"/g], 
get: [/\'get\'/g, /\"get\"/g], 
filter: [/\'filter\'/g, /\"filter\"/g], 
px: [/\'px\'/g, /\"px\"/g] 
}; 
function callback1(result) { 
var obj = result[0]; 
var myshowEL = $('#myshow1'); 
myshowEL = myshowEL.empty(); 
myshowEL.append('<div>' + obj.type + ': <span style="color: blue;">' + obj.num + '</span></div>'); 
} 
function callback2(result) { 
var myshowEL = $('#myshow2'); 
myshowEL = myshowEL.empty(); 
for (var i=0; i<result.length; i++) { 
var obj = result[i]; 
myshowEL.append('<div>"' + obj.type + '": <span style="color: blue;">' + obj.num + '</span></div>'); 
} 
} 
$('#mybtn1').click(function(){ 
var $txtarea = $('#myjquery'); 
var source = $txtarea.val(); 
var val = $('#myinput').val(); 
if (val == '' || val.length<2) { 
alert('至少两个字符'); 
return; 
} 
var keywords = [val]; 
main(keywords, source, callback1, 1) 
}); 
$('#mybtn2').click(function(){ 
var $txtarea = $('#myjquery'); 
var source = $txtarea.val(); 
main(rObj, source, callback2, 1); 
}); 
}, 1000); 
// ]]></script> 
</body> 
</html>
Javascript 相关文章推荐
遨游,飞飞,IE,空中网 浏览器无提示关闭方法
Jul 11 Javascript
js页面滚动时层智能浮动定位实现(jQuery/MooTools)
Aug 23 Javascript
JavaScript转换农历类实现及调用方法
Jan 27 Javascript
jQuery元素的隐藏与显示实例
Jan 20 Javascript
javascript伸缩型菜单实现代码
Nov 16 Javascript
详解vue组件开发脚手架
Jun 15 Javascript
浅析vue给不同环境配置不同打包命令
Aug 17 Javascript
jQuery实现的隔行变色功能【案例】
Feb 18 jQuery
JavaScript面向对象编程小游戏---贪吃蛇代码实例
May 15 Javascript
vue下使用nginx刷新页面404的问题解决
Aug 02 Javascript
vue实现手机端省市区区域选择
Sep 27 Javascript
JavaScript 中的六种循环方法
Jan 06 Javascript
JQuery插件Style定制化方法的分析与比较
May 03 #Javascript
拉动滚动条加载数据的jquery代码
May 03 #Javascript
基于jquery的固定表头和列头的代码
May 03 #Javascript
一个基于jQuery的树型插件(OrangeTree)使用介绍
May 03 #Javascript
ASP.NET中AJAX 调用实例代码
May 03 #Javascript
javascript中将Object转换为String函数代码 (json str)
Apr 29 #Javascript
基于jquery ajax 用户无刷新登录方法详解
Apr 28 #Javascript
You might like
php数字每三位加逗号的功能函数
2015/10/22 PHP
PHP定时任务获取微信access_token的方法
2016/10/10 PHP
JavaScript 模仿vbs中的 DateAdd() 函数的代码
2007/08/13 Javascript
用js实现随机返回数组的一个元素
2007/08/13 Javascript
javascript 内存回收机制理解
2011/01/17 Javascript
javascript作用域和闭包使用详解
2014/04/25 Javascript
浅析基于WEB前端页面的页面内容搜索的实现思路
2014/06/10 Javascript
JS+CSS实现简易实用的滑动门菜单效果
2015/09/18 Javascript
Bootstrap按钮下拉菜单组件详解
2016/05/10 Javascript
在Javascript操作JSON对象,增加 删除 修改的简单实现
2016/06/02 Javascript
JavaScript Uploadify文件上传实例
2017/02/28 Javascript
NodeJs安装npm包一直失败的解决方法
2017/04/28 NodeJs
JavaScript 用fetch 实现异步下载文件功能
2017/07/21 Javascript
基于js原生和ajax的get和post方法以及jsonp的原生写法实例
2017/10/16 Javascript
ReactNative 之FlatList使用及踩坑封装总结
2017/11/29 Javascript
解决vue项目中type=”file“ change事件只执行一次的问题
2018/05/16 Javascript
Vue动态控制input的disabled属性的方法
2018/06/26 Javascript
Vue+Element实现表格编辑、删除、以及新增行的最优方法
2019/05/28 Javascript
js回到页面指定位置的三种方式
2020/12/17 Javascript
JavaScript canvas实现雨滴特效
2021/01/10 Javascript
[14:24]Optic Gaming vs PSG LGD BO3
2018/06/07 DOTA
[40:55]Liquid vs LGD 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
详解python并发获取snmp信息及性能测试
2017/03/27 Python
python django使用haystack:全文检索的框架(实例讲解)
2017/09/27 Python
基于python中的TCP及UDP(详解)
2017/11/06 Python
Django中使用MySQL5.5的教程
2019/12/18 Python
python自动化测试三部曲之request+django实现接口测试
2020/10/07 Python
html5 input属性使用示例
2013/06/28 HTML / CSS
Quiksilver荷兰官方网站:冲浪和滑雪板
2019/11/16 全球购物
会计电算化专业应届大学生求职信
2013/10/22 职场文书
小学教学随笔感言
2014/02/26 职场文书
酒鬼酒广告词
2014/03/21 职场文书
竞选学生会主席演讲稿
2014/04/24 职场文书
学习教师敬业奉献模范事迹材料思想汇报
2014/09/19 职场文书
2016全国“质量月”活动标语口号
2015/12/26 职场文书
拙作再改《我的收音机情缘》
2022/04/05 无线电