zoukankan      html  css  js  c++  java
  • 超实用的JavaScript代码段

    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插件可以根据你设置的步长(间隔时间)来逐个隐藏一组元素。在列表元素的重新加载中使用,可以达到很好的效果。

    $.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 });

    4、

    限制文本字数

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

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

    5、

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

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

    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
    }
    …

    6. 全局计数

    在一些游戏或广告场景中,你需要记录用户在当前页面上点击某一个按钮的次数,这时你可以使用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...
        });

    7、创建动态菜单或下拉列表

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

    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 month
    makeMenu(
      ['January:JAN', 'February:FEB', 'March:MAR'], // item:value
      ['select', 'option']
    );
    
    // List of groceries
    makeMenu(
      ['Carrots', 'Lettuce', 'Tomatos', 'Milk'],
      ['ol', 'li']
    );

     7、 时间格式化

    function dateFormat(t){        // t 是以秒为单位的值。
        var h = ~~(t/3600),        // t除以3600,取整,得到的就是小时。
            m = ~~(t%3600/60),    // t求余3600,取模,得到的就是去除小时剩下的秒数(分钟 + 秒),再除以60,取整,得到的就是分钟。
            s = ~~(t%3600%60);    // t求余3600,再求余60,剩下的自然就是“秒数”。
     
         return h+'小时'+m+''+s+'';
    }

     8、localstorage 方法封装

     function storageFun(storageType, handler, key, value) {
                        var storage = storageType + "Storage";
                        switch(handler){
                            case "set":
                                window[storage].setItem(key, value);
                                break;
                            case "get":
                                return window[storage].getItem(key);
                                break;
                            case "remove":
                                window[storage].removeItem(key);
                                break;
                            case "clear":
                                window[storage].clear();
                        }
                    }

     9、js动态让多列input变成不可编辑状态

    注意readOnly 中的O是大写
    
    两种方法:
     $(".realPrice").attr("readOnly",true); 不可编辑,可以传值
     $(".realPrice").attr("disabled",true);不可编辑,不可以传值

     10、数组去空,常常分割出来的新的数组会把空也加进去,这时候去空就需要了

    var arr=["","hello","","world","  ","goodboy"];   
    alert($.grep(arr, function(n) {return $.trim(n).length > 0;}));  

     11、判断:密码,长度:6-16,必须是:大写字母,小写字母,数字,特殊字符中的两种以上组合

    var pwd = this.form.password;
                    console.log(pwd)
                    if(pwd.length > 16 || pwd.length < 6){
                        this.$message.error('密码长度必须是6-16位');
                        return;
                    }
                    var ls = 0;
                    if(pwd.match(/([a-z])+/)){ 
                        ls++; 
                    }
                    if(pwd.match(/([0-9])+/)){
                        ls++; 
                    }
                    if(pwd.match(/([A-Z])+/)){      
                        ls++; 
                    }
                    if(pwd.match(/[^a-zA-Z0-9]+/)){
                        ls++;   
                    }
                    if(pwd.indexOf(" ") != -1){
                        this.$message.error('密码不能包含空格');
                        return;
                    }
                    if(ls < 2){
                        this.$message.error('密码必须是:大写字母,小写字母,数字,特殊字符中的两种以上组合');
                        return;
                    }
  • 相关阅读:
    Ubuntu 16 安装redis客户端
    crontab 参数详解
    PHP模拟登录发送闪存
    Nginx配置端口访问的网站
    Linux 增加对外开放的端口
    Linux 实用指令之查看端口开启情况
    无敌的极路由
    不同的域名可以指向同一个项目
    MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk. Commands that may modify the data set are disabled. Please check Redis logs for details about the error
    Redis 创建多个端口
  • 原文地址:https://www.cnblogs.com/haonanZhang/p/6700208.html
Copyright © 2011-2022 走看看