JavaScript正变得越来越流行,它已经成为前端开发的第一选择,并且利用基于JavaScript语言的NodeJS,我们也可以开发出高 性能的后端服务,甚至我还看到在硬件编程领域也出现了JavaScript的身影。JavaScript正在逐渐进化为一门全能的开发语言。下面是我收集 的10段实用JavaScript代码,基于它们你还可以创造出更强大的JS插件或功能函数。

但用好JavaScript并不容易,你除了需要掌握它的语法并知道如何写出高质量的代码之外,还需要了解如何解决那些几乎在每个项目中都会遇到的 需求场景,比如:判断日期,高亮文本,限制字符数等等,有很多第三方库可以解决这些问题,但这些库可能并非只是为解决这一个问题而创建的,这意味着你需要 引入了很多无关的代码,这将使你的整个系统变得臃肿,而且也会影响到系统的性能。我的做法是,收集和使用那些常见的JavaScript代码段,并在需要 时,尽可能首先使用它们。

1. 判断日期是否有效

JavaScript中自带的日期函数还是太过简单,很难满足真实项目中对不同日期格式进行解析和判断的需要。JQuery也有一些第三方库来使日 期相关的处理变得简单,但有时你可能只需要一个非常简单的函数,而不想引入一个庞大的第三方库。这时,你可以使用下面这段日期校验代码,它允许你自定义日 期格式并进行日期有效性的校验。

  1. function isValidDate(value, userFormat) {
  2. // Set default format if format is not provided
  3. userFormat = userFormat || 'mm/dd/yyyy';
  4. // Find custom delimiter by excluding
  5. // month, day and year characters
  6. var delimiter = /[^mdy]/.exec(userFormat)[0];
  7. // Create an array with month, day and year
  8. // so we know the format order by index
  9. var theFormat = userFormat.split(delimiter);
  10. // Create array from user date
  11. var theDate = value.split(delimiter);
  12. function isDate(date, format) {
  13. var m, d, y, i = 0, len = format.length, f;
  14. for (i; i < len; i++) {
  15. f = format[i];
  16. if (/m/.test(f)) m = date[i];
  17. if (/d/.test(f)) d = date[i];
  18. if (/y/.test(f)) y = date[i];
  19. }
  20. return (
  21. m > 0 && m < 13 &&
  22. y && y.length === 4 &&
  23. d > 0 &&
  24. // Check if it's a valid day of the month
  25. d <= (new Date(y, m, 0)).getDate()
  26. );
  27. }
  28. return isDate(theDate, theFormat);
  29. }

使用方法:

下面这个调用返回false,因为11月份没有31天

  1. isValidDate('dd-mm-yyyy', '31/11/2012')

2. 获取一组元素的最大宽度或高度

下面这个函数,对于需要进行动态排版的开发人员非常有用。

  1. var getMaxHeight = function ($elms) {
  2. var maxHeight = 0;
  3. $elms.each(function () {
  4. // In some cases you may want to use outerHeight() instead
  5. var height = $(this).height();
  6. if (height > maxHeight) {
  7. maxHeight = height;
  8. }
  9. });
  10. return maxHeight;
  11. };

使用方法:

  1. $(elements).height( getMaxHeight($(elements)) );

3. 高亮文本

有很多JQuery的第三方库可以实现高亮文本的功能,但我更喜欢用下面这一小段JavaScript代码来实现这个功能,它非常短小,而且可以根据我的需要去进行灵活的修改,而且可以自己定义高亮的样式。下面这两个函数可以帮助你创建自己的文本高亮插件。

  1. function highlight(text, words, tag) {
  2. // Default tag if no tag is provided
  3. tag = tag || 'span';
  4. var i, len = words.length, re;
  5. for (i = 0; i < len; i++) {
  6. // Global regex to highlight all matches
  7. re = new RegExp(words[i], 'g');
  8. if (re.test(text)) {
  9. text = text.replace(re, '<'+ tag +'>$&</'+ tag +'>');
  10. }
  11. }
  12. return text;
  13. }

你同样会需要取消高亮的函数:

  1. function unhighlight(text, tag) {
  2. // Default tag if no tag is provided
  3. tag = tag || 'span';
  4. var re = new RegExp('(<'+ tag +'.+?>|<\/'+ tag +'>)', 'g');
  5. return text.replace(re, '');
  6. }

使用方法:

  1. $('p').html( highlight(
  2. $('p').html(), // the text
  3. ['foo', 'bar', 'baz', 'hello world'], // list of words or phrases to highlight
  4. 'strong' // custom tag
  5. ));

4. 文字动效

有时你会希望给你的一段文字增加动效,让其中的每个字都动起来。你可以使用下面这段jQuery插件代码来达到这个效果。当然你需要结合一个CSS3 transition样式来达到更好的效果。

  1. $.fn.animateText = function(delay, klass) {
  2. var text = this.text();
  3. var letters = text.split('');
  4. return this.each(function(){
  5. var $this = $(this);
  6. $this.html(text.replace(/./g, '<span>$&</span>'));
  7. $this.find('span.letter').each(function(i, el){
  8. setTimeout(function(){ $(el).addClass(klass); }, delay * i);
  9. });
  10. });
  11. };

使用方法:

  1. $('p').animateText(15, 'foo');

5. 逐个隐藏元素

下面这个jQuery插件可以根据你设置的步长(间隔时间)来逐个隐藏一组元素。在列表元素的重新加载中使用,可以达到很好的效果。

  1. $.fn.fadeAll = function (ops) {
  2. var o = $.extend({
  3. delay: 500, // delay between elements
  4. speed: 500, // animation speed
  5. ease: 'swing' // other require easing plugin
  6. }, ops);
  7. var $el = this;
  8. for (var i=0, d=0, l=$el.length; i<l; i++, d+=o.delay) {
  9. $el.eq(i).delay(d).fadeIn(o.speed, o.ease);
  10. }
  11. return $el;
  12. }

使用方法:

  1. $(elements).fadeAll({ delay: 300, speed: 300 });

6. 限制文本字数

下面这端脚本允许你根据给定的字符长度截取文本,如果文本被截取,那么它的后面会自动带上省略号。

  1. function excerpt(str, nwords) {
  2. var words = str.split(' ');
  3. words.splice(nwords, words.length-1);
  4. return words.join(' ') +
  5. (words.length !== str.split(' ').length ? '…' : '');
  6. }

7. 判断相应式布局中当前适配度

目前很多设计已经采用了响应式布局来适配网站或应用在不同设备上的显示。你经常需要在代码中判断当前处于哪一个屏幕适配度下。

  1. function isBreakPoint(bp) {
  2. // The breakpoints that you set in your css
  3. var bps = [320, 480, 768, 1024];
  4. var w = $(window).width();
  5. var min, max;
  6. for (var i = 0, l = bps.length; i < l; i++) {
  7. if (bps[i] === bp) {
  8. min = bps[i-1] || 0;
  9. max = bps[i];
  10. break;
  11. }
  12. }
  13. return w > min && w <= max;
  14. }

使用方法:

  1. if ( isBreakPoint(320) ) {
  2. // breakpoint at 320 or less
  3. }
  4. if ( isBreakPoint(480) ) {
  5. // breakpoint between 320 and 480
  6. }

8. 全局计数

在一些游戏或广告场景中,你需要记录用户在当前页面上点击某一个按钮的次数,这时你可以使用jQuery的.data()函数来处理:

  1. $(element)
  2. .data('counter', 0) // begin counter at zero
  3. .click(function() {
  4. var counter = $(this).data('counter'); // get
  5. $(this).data('counter', counter + 1); // set
  6. // do something else...
  7. });

9. 嵌入优酷视频

  1. function embedYouku(link, ops) {
  2. var o = $.extend({
  3. width: 480,
  4. height: 320,
  5. params: ''
  6. }, ops);
  7. var id = /\?v\=(\w+)/.exec(link)[1];
  8. return '<embed allowFullScreen="true" id="embedid" quality="high" width="'+o.width+'" height="'+o.height+'" align="middle" allowScriptAccess="always" type="application/x-shockwave-flash" src="'+id+'?'+o.ops'"';
  9. }

使用方法:

  1. embedYouku(
  2. 'http://static.youku.com/v/swf/qplayer.swf',
  3. {'winType=adshow&VideoIDS=XMTE3NzQ0NTky&isAutoPlay=false&isShowRelatedVideo=false'}
  4. );

10. 创建动态菜单或下拉列表

在很多场景中,我们都需要动态地创建菜单、下拉列表或列表项。下面是一段最基础的代码实现上面的功能,你可以根据实际需要进行相应的扩展。

  1. function makeMenu(items, tags) {
  2. tags = tags || ['ul', 'li']; // default tags
  3. var parent = tags[0];
  4. var child = tags[1];
  5. var item, value = '';
  6. for (var i = 0, l = items.length; i < l; i++) {
  7. item = items[i];
  8. // Separate item and value if value is present
  9. if (/:/.test(item)) {
  10. item = items[i].split(':')[0];
  11. value = items[i].split(':')[1];
  12. }
  13. // Wrap the item in tag
  14. items[i] = '<'+ child +' '+
  15. (value && 'value="'+value+'"') +'>'+ // add value if present
  16. item +'</'+ child +'>';
  17. }
  18. return '<'+ parent +'>'+ items.join('') +'</'+ parent +'>';
  19. }

使用方法:

  1. // Dropdown select month
  2. makeMenu(
  3. ['January:JAN', 'February:FEB', 'March:MAR'], // item:value
  4. ['select', 'option']
  5. );
  6. // List of groceries
  7. makeMenu(
  8. ['Carrots', 'Lettuce', 'Tomatos', 'Milk'],
  9. ['ol', 'li']
  10. );

总结:

以上只是那些实用JavaScript代码段中的一小部分,我也建议你平时注意收集或自己编写这样的基础代码段,它们能在很多项目中使用或通过一些改造提供更完善的功能,使用这些代码段将为你节省下大量的开发时间。

前端福利!10个短小却超实用的JavaScript 代码段的更多相关文章

  1. 推荐10 个短小却超实用的 JavaScript 代码段

    1. 判断日期是否有效 JavaScript中自带的日期函数还是太过简单,很难满足真实项目中对不同日期格式进行解析和判断的需要.jQuery也有一些第三方库来使日期相关的处理变得简单,但有时你可能只需 ...

  2. 超实用的JavaScript代码段 --倒计时效果

    现今团购网.电商网.门户网等,常使用时间记录重要的时刻,如时间显示.倒计时差.限时抢购等,本文分析不同倒计时效果的计算思路及方法,掌握日期对象Date,获取时间的方法,计算时差的方法,实现不同的倒时计 ...

  3. 超实用的JavaScript代码段 Item4 --发送短信验证码

    发送短信验证码 实现点击“发送验证码”按钮后,按钮依次显示为“59秒后重试”.“58秒后重试”…直至倒计时至0秒时再恢复显示为“发送验证码”.在倒计时期间按钮为禁用状态 . 第一步.获取按钮.绑定事件 ...

  4. 超实用的JavaScript代码段 Item8 -- js对象的(深)拷贝

    js 对象 浅拷贝 和 深拷贝 1.浅拷贝 拷贝就是把父对像的属性,全部拷贝给子对象. 下面这个函数,就是在做拷贝: var Chinese = { nation:'中国' } var Doctor ...

  5. 超实用的JavaScript代码段 Item5 --图片滑动效果实现

    先上图 鼠标滑过那张图,显示完整的哪张图,移除则复位: 简单的CSS加JS操作DOM实现: <!doctype html> <html> <head> <me ...

  6. 超实用的JavaScript代码段 Item2 --伸缩菜单栏

    伸缩菜单栏 点击标题时判断该标题下的菜单是否显示,如果是显示的则将其隐藏,如果是隐藏的则将其显示出来. <!doctype html> <html lang="en&quo ...

  7. 超实用的JavaScript代码段 Item1 --倒计时效果

    现今团购网.电商网.门户网等,常使用时间记录重要的时刻,如时间显示.倒计时差.限时抢购等,本文分析不同倒计时效果的计算思路及方法,掌握日期对象Date,获取时间的方法,计算时差的方法,实现不同的倒时计 ...

  8. 超实用的JavaScript代码段

    1. 判断日期是否有效 JavaScript中自带的日期函数还是太过简单,很难满足真实项目中对不同日期格式进行解析和判断的需要.JQuery也有一些第三方库来使日期相关的处理变得简单,但有时你可能只需 ...

  9. 《超实用的JavaScript代码段》—— 读后总结

    这本书全是代码,从头到尾跟着坐下来确实收获很多.比那些古板的教科书式的理解更多,不过书中并不是每个例子都做了,有的作者封装的太多,觉得看了收获不多,就没细看——比如模块渐变.有空好好学学这段的代码. ...

随机推荐

  1. GL_ARRAY_BUFFER 和 GL_ELEMENT_ARRAY_BUFFER

    转载请注明出处.系列教程: webgl-lesson.wysaid.org 第七话, 了解OpenGL的几种Array Buffer,实现大量顶点的批量绘制, 以及映射纹理坐标 每一话都间隔很久,其实 ...

  2. Linux 进程间通讯详解二

    消息队列 --消息队列提供了本机上从一个进程向另外一个进程发送一块数据的方法 --每个数据块都被认为有一个类型,接收者进程接收的数据块可以有不同的类型值 --消息队列也有管道一样的不足,就是每个消息的 ...

  3. CentOS7安装MySQL、Redis、RabbitMQ

    系统版本 CentOS Linux release 7.2.1511 (Core) MySQL安装 一.下载mysql的repo源 wget http://repo.mysql.com/mysql-c ...

  4. 微信扫描打开APP下载链接提示代码优化

    上一次我发了一篇文章叫“微信打开网址添加在浏览器中打开提示”,里面我发出来了三个代码,分别是纯JS.js+html.jQuery+HTML代码.今天来一个简化版带可以关闭的按钮操作.使用的是纯JS+H ...

  5. JS截取字符串

    使用 substring()或者slice() 函数:split() 功能:使用一个指定的分隔符把一个字符串分割存储到数组例子:str=”jpg|bmp|gif|ico|png”;arr=theStr ...

  6. 再谈Newtonsoft.Json高级用法

    上一篇Newtonsoft.Json高级用法发布以后收到挺多回复的,本篇将分享几点挺有用的知识点和最近项目中用到的一个新点进行说明,做为对上篇文章的补充. 阅读目录 动态改变属性序列化名称 枚举值序列 ...

  7. 反射在ADO.NET中的运用(你还在每个项目中循环遍历DataTable吗)

    图片有点大哈,但大更能说明问题.您是不是每个项目都在重复的做图片中的事情-----循环把数据库中返回的表转化为实体对象.是不是每次都在抱怨这样的重复工作.字段越多抱怨越多!不用抱怨了.当你看到这篇文章 ...

  8. SharePoint Fundation 2013中SecurityTokenServiceApplication错误

    在Fundation 2013与Office Web Apps Server集成,预览文档时提示错误,存入口检查失败,因为可用内存(47091712 字节)少于总内存的 5%.因此,该服务不可用于传入 ...

  9. CCF 201604-4 游戏

    /* 广度优先搜索 左右两个方向 node{x,y,step} 到了就返回step,不到就检查左右两边符合条件就入队. 用一个结构体保存 危险时间 time[i][j]{beg,time} beg=e ...

  10. TCP协议中的三次握手和四次挥手(图解)

    建立TCP需要三次握手才能建立,而断开连接则需要四次握手.整个过程如下图所示: 先来看看如何建立连接的. 首先Client端发送连接请求报文,Server段接受连接后回复ACK报文,并为这次连接分配资 ...