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

来源:互联网 发布:韩国电视台直播软件 编辑:程序博客网 时间:2024/06/07 10:19

JavaScript正变得越来越流行,它已经成为前端开发的第一选择,并且利用基于JavaScript语言的NodeJS,我们也可以开发出高性能的后端服务,甚至我还看到在硬件编程领域也出现了JavaScript的身影。JavaScript正在逐渐进化为一门全能的开发语言。

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

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

function isValidDate(value, userFormat) {  // Set default format if format is not provided  userFormat = userFormat || 'mm/dd/yyyy';  // Find custom delimiter by excluding  // month, day and year characters  var delimiter = /[^mdy]/.exec(userFormat)[0];  // Create an array with month, day and year  // so we know the format order by index  var theFormat = userFormat.split(delimiter);  // Create array from user date  var theDate = value.split(delimiter);  function isDate(date, format) {    var m, d, y, i = 0, len = format.length, f;    for (i; i < len; i++) {      f = format[i];      if (/m/.test(f)) m = date[i];      if (/d/.test(f)) d = date[i];      if (/y/.test(f)) y = date[i];    }    return (      m > 0 && m < 13 &&      y && y.length === 4 &&      d > 0 &&      // Check if it's a valid day of the month      d <= (new Date(y, m, 0)).getDate()    );  }  return isDate(theDate, theFormat);}

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

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

2.获取一组元素的最大宽度或高度
下面这个函数,对于需要进行动态排版的开发人员非常有用。

var getMaxHeight = function ($elms) {  var maxHeight = 0;  $elms.each(function () {    // In some cases you may want to use outerHeight() instead    var height = $(this).height();    if (height > maxHeight) {      maxHeight = height;    }  });  return maxHeight;};

使用方法:

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

3.高亮文本

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

function highlight(text, words, tag) {  // Default tag if no tag is provided  tag = tag || 'span';  var i, len = words.length, re;  for (i = 0; i < len; i++) {    // Global regex to highlight all matches    re = new RegExp(words[i], 'g');    if (re.test(text)) {      text = text.replace(re, '<'+ tag +' class="highlight">$&</'+ tag +'>');    }  }  return text;}

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

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

使用方法:

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

4.文字动效

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

$.fn.animateText = function(delay, klass) {  var text = this.text();  var letters = text.split('');  return this.each(function(){    var $this = $(this);    $this.html(text.replace(/./g, '<span class="letter">$&</span>'));    $this.find('span.letter').each(function(i, el){      setTimeout(function(){ $(el).addClass(klass); }, delay * i);    });  });};

使用方法:

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

5.逐个隐藏元素

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

$.fn.fadeAll = function (ops) {  var o = $.extend({    delay: 500, // delay between elements    speed: 500, // animation speed    ease: 'swing' // other require easing plugin  }, ops);  var $el = this;  for (var i=0, d=0, l=$el.length; i<l; i++, d+=o.delay) {    $el.eq(i).delay(d).fadeIn(o.speed, o.ease);  }  return $el;}

使用方法:

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

6.限制文本字数

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

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

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

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

function isBreakPoint(bp) {  // The breakpoints that you set in your css  var bps = [320, 480, 768, 1024];  var w = $(window).width();  var min, max;  for (var i = 0, l = bps.length; i < l; i++) {    if (bps[i] === bp) {      min = bps[i-1] || 0;      max = bps[i];      break;    }  }  return w > min && w <= max;}

使用方法:

if ( isBreakPoint(320) ) {  // breakpoint at 320 or less}if ( isBreakPoint(480) ) {  // breakpoint between 320 and 480}…

8.全局计数

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

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

9.嵌入优酷视频

function embedYouku(link, ops) {  var o = $.extend({    width: 480,    height: 320,    params: ''  }, ops);  var id = /\?v\=(\w+)/.exec(link)[1];  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'"';}

使用方法:

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

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

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

function makeMenu(items, tags) {  tags = tags || ['ul', 'li']; // default tags  var parent = tags[0];  var child = tags[1];  var item, value = '';  for (var i = 0, l = items.length; i < l; i++) {    item = items[i];    // Separate item and value if value is present    if (/:/.test(item)) {      item = items[i].split(':')[0];      value = items[i].split(':')[1];    }    // Wrap the item in tag    items[i] = '<'+ child +' '+      (value && 'value="'+value+'"') +'>'+ // add value if present        item +'</'+ child +'>';  }  return '<'+ parent +'>'+ items.join('') +'</'+ parent +'>';}

使用方法:

// Dropdown select monthmakeMenu(  ['January:JAN', 'February:FEB', 'March:MAR'], // item:value  ['select', 'option']);// List of groceriesmakeMenu(  ['Carrots', 'Lettuce', 'Tomatos', 'Milk'],  ['ol', 'li']);

总结:

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

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 寄报销发票给顺丰快递搞丢了怎么办 物流显示揽件但把快递弄丢了怎么办 在李宁商城上买的东西丢了怎么办 我的货发物流都过了好几天怎么办 运动鞋子买小了一码有些挤脚怎么办 媳妇先动手打我我又打媳妇了怎么办 京东商城买个电视没验收破了怎么办 钱充给波克城市游戏还不能玩怎么办 我的魅族账号密保问题忘记了怎么办 在手机店买手机买贵了被骗了怎么办 信翼4g上网宝登录密码忘了怎么办 信翼4g上网宝管理密码忘了怎么办 淘宝上买了货但店铺消失了怎么办啊 微信的版本过低登陆不了微信怎么办 红米3用联通4g卡无信号怎么办 网店跟买家说好有货又没货怎么办 新买的号码被别人注册过微信怎么办 买了个号码卡已经被注册微信怎么办 我怎么办微信把拉黑一次删了人太多 国家大剧院的票丢了能补票吗怎么办 打完狂犬疫苗后我抽了很多烟怎么办 我老婆接受了我的小三现在该怎么办 今日头条我发的文章浏览量少怎么办 如果荷兰猪母的和公的打架该怎么办 我买的商铺地址被别人注册了怎么办 搜狗阅读购买搜豆没有到账该怎么办 捡的ⅴⅰⅴo指纹屏锁解不开怎么办 在百度上订的演出票不配送了怎么办 我在租车公司租的车撞报废了怎么办 交给学校查重的论文发错了怎么办啊 顺丰快递员把我的快递弄丢了怎么办 苹果6换了电池触屏不好用了怎么办 律协以律所被投诉不批准实习怎么办 提车时间没有写4s不给车怎么办 全店的人都知道我坐过牢怎么办 找了一个长得帅玩心重的老公怎么办 汽车左后轮油封漏油换了也漏怎么办 星露谷物语不小心把任务删了怎么办 饿了么商家版账号和密码忘了怎么办 红米4x手机里的照片全删了怎么办 微信表情包里编辑软文的数字怎么办