JS常用函数大全

免疫bodyclick方法

这个是个比较好的方法,一个弹出窗口,要设定在任何其他地方点击这个窗口会自动消失,但点这个窗口内部是没事的。那么就要用到这个方法了。

// (对body点击产生效果免疫的部分, 阻止冒泡body事件)

// 通过ID屏蔽->@args(event, targetID)
function blockClickToBodyById(a,b){return b==$(a.target).prop("id")||$(a.target).parents("#"+b).length?!1:!0}

// 通过对象屏蔽->@args(event, target)
function blockClickToBodyByObj(a,b){var c;return b=$(b),b.prop("id")||(c=!0,b.prop("id","__kobe_special_id_zzzz__")),b.prop("id")==$(a.target).prop("id")||$(a.target).parents("#"+b.prop("id")).length?(c&&b.removeAttr("id"),!1):(c&&b.removeAttr("id"),!0)}

// 使用
if (false == blockClickToBodyByObj(ev, $("div#test"))) return;

// 一般用法
$("body").on("click", function(){
  if(false == blockClickToBodyByObj(ev, $("div#test"))) return;
  $("#test").remove();
});

将url参数转为obj

var urlParamToObj = function(u) {
  var sear = u.slice(u.indexOf("?") + 1).split("&"), p = {};
  for(var i = 0, j=sear.length; j>i; i++) {
    var s = sear[i].split("=");
    p[s[0]] = s[1];
  }
  return p;
};

数组去重

// 双for循环去重
function distinctArr(a){var e,f,b=a.concat(),c=[],d=function(a,b,c){var d;if(c){for(d=b.length-1;d>=0;d--)if(a===b[d])return!0;return!1}for(d=b.length-1;d>=0;d--)if(a==b[d])return!0;return!1};for(e=b.length-1;e>=0;e--)f=b.pop(),d(f,c)||c.push(f);return c}

// 将数组排序并去重
function distinctAndSortNumericArray(arr, wantDesc){
  var arrSorted = [], sortDir = !wantDesc ? 1 : -1;

  arr.sort(function(a, b){
    return (a - b) * wantDesc;
  });

  for(var i=0, j=arr.length, len2; j>i; i++){
    len2 = arrSorted.length;
    if(len2){
      if(arrSorted[len2 - 1] != arr[i])
        arrSorted.push(arr[i]);
    }else
      arrSorted.push(arr[i]);
  }
  return arrSorted;
}

克隆方法-clone()

function clone(obj) {
  var o;
  switch (typeof obj) {
    case ‘undefined‘:
      break;
    case ‘string‘:
      o = obj + ‘‘;
      break;
    case ‘number‘:
      o = obj - 0;
      break;
    case ‘boolean‘:
      o = obj;
      break;
    case ‘object‘:
      if (obj === null) {
        o = null;
      } else {
        if (obj instanceof Array) {
          o = [];
          for (var i = 0, len = obj.length; i < len; i++) {
            o.push(clone(obj[i]));
          }
        } else {
          o = {};
          for (var k in obj) {
            o[k] = clone(obj[k]);
          }
        }
      }
      break;
    default:
      o = obj;
      break;
  }
  return o;
}

邮箱格式-正则检查

var reEmail = /^(?:\w+\.)*\[email protected]\w+(?:\.\w+)+$/i;
reEmail.test( "[email protected]" ),       // true
reEmail.test( "[email protected]" ),      // false
reEmail.test( "[email protected]" ),   // true
reEmail.test( "[email protected]" );    // true

生成GUID码

Math.guid = function(){
  return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function(c){

    var r = Math.random()*16|0, v = c == "x" ? r : (r&0x3|0x8);
    return v.toString(16);
  }).toUpperCase();
};

随机生成数字字母的字符串(验证码)

function generateRandomAlphaNum(len) {
  var rdmString = "";
  for( ; rdmString.length < len; rdmString  += Math.random().toString(36).substr(2));
  return  rdmString.substr(0, len);
}
// 译者注:特意查了一下Math.random()生成0到1之间的随机数,number.toString(36)是将这个数字转换成36进制(0-9,a-z),最后substr去掉前面的“0.”字符串

base64字符串编码与解码

function base64Encode(str) {
  return btoa(unescape(encodeURIComponent(str)));
}
function base64Decode(str) {
  return decodeURIComponent(escape(atob(str)));
}

js兼容获取最终样式

function getStyle(obj, attribute) {
  return obj.currentStyle ? obj.currentStyle[attribute] : document.defaultView.getComputedStyle(obj, null)[attribute];
}
//IE:
var bgColor = oDiv.currentStyle.backgroundColor; //只读的,如果对它进行写入会发生错误
//DOM:
//getComputedStyle(obj,null)接受两个参数,需要获取样式的元素和诸如:hover和:first-letter之类的伪元素
var bgColor = document.defaultView.getComputedStyle(oDiv, null).backgroundColor;

大数字每3位添加逗号

function addCommas(nStr) {
  nStr += ‘‘;
  var x = nStr.split(‘.‘);
  var x1 = x[0];
  var x2 = x.length >; 1 ? ‘.‘ + x[1] : ‘‘;
  var rgx = /(d+)(d{3})/;

  while (rgx.test(x1)) {
    x1 = x1.replace(rgx, ‘$1‘ + ‘,‘ + ‘$2‘);
  }

  return x1 + x2;
}

window.requestAnimationFrame兼容写法

window.requestAnimFrame = function() {
  return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || function(e, t) {
    return window.setTimeout(e, 1e3 / 60)
  };
}();

js的trim()

s = new String("   -- kobe  ").trim()  -> "-- kobe"
s = new String("   -- kobe  ").trimLeft() -> "-- kobe  "
s = new String("   -- kobe  ").trimRight() -> "   -- kobe"

// 正则实现trim()
function trim(a) {return a.replace(/(^\s*)|(\s*$)/g, "")}

// jquery
$.trim(" haha ");

判断浏览器类型

//浏览器判断,使用方法:
var userAgent = navigator.userAgent.toLowerCase();
browser = {
  version: (userAgent.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/) || [0, ‘0‘])[1],
  safari: /webkit/.test(userAgent),
  opera: /opera/.test(userAgent),
  chrome: /chrome/.test(userAgent),
  msie: /msie/.test(userAgent) && !/opera/.test(userAgent),
  mozilla: /mozilla/.test(userAgent) && !/(compatible|webkit)/.test(userAgent)
}
//判断IE6
function isIe6() {
  if (browser.msie && browser.version == ‘6.0‘) {
    alert(‘他就是IE6‘);
  } else {
    alert(‘不是IE6‘);
  }
}
isIe6();

jQuery方法:

/* <![CDATA[ */
$(document).ready(function() {
  var bro = $.browser;
  var binfo = "";
  if (bro.msie) {
    binfo = "Microsoft Internet Explorer " + bro.version;
  }
  if (bro.mozilla) {
    binfo = "Mozilla Firefox " + bro.version;
  }
  if (bro.safari) {
    binfo = "Apple Safari " + bro.version;
  }
  if (bro.opera) {
    binfo = "Opera " + bro.version;
  }
  //alert(binfo);
  $("#browser").html(binfo);
})
/* ]]> */

获取浏览器的前缀

var prefix = (function() {
  if ("undefined" !== typeof window.getComputedStyle) {
    var styles = window.getComputedStyle(document.documentElement, ‘‘),
      pre = (Array.prototype.slice
        .call(styles)
        .join(‘‘)
        .match(/-(moz|webkit|ms)-/) || (styles.OLink === ‘‘ && [‘‘, ‘o‘])
      )[1],
      dom = (‘WebKit|Moz|MS|O‘).match(new RegExp(‘(‘ + pre + ‘)‘, ‘i‘))[1];
    return {
      dom: dom,
      lowercase: pre,
      css: ‘-‘ + pre + ‘-‘,
      js: pre[0].toUpperCase() + pre.substr(1)
    };
  }
})();

输出有:

{"dom":"WebKit","lowercase":"webkit","css":"-webkit-","js":"Webkit"}
{"dom":"MS","lowercase":"ms","css":"-ms-","js":"Ms"}
{"dom":"Moz","lowercase":"moz","css":"-moz-","js":"Moz"}

throttle-debounce

/*
 * 频率控制 返回函数连续调用时,fn 执行频率限定为每多少时间执行一次
 * @param fn {function}  需要调用的函数
 * @param delay  {number}    延迟时间,单位毫秒
 * @param immediate  {bool} 给 immediate参数传递false 绑定的函数先执行,而不是delay后后执行。
 * @return {function}   实际调用函数
 */
var throttle = function(fn, delay, immediate, debounce) {
  var curr = +new Date(), //当前时间
    last_call = 0,
    last_exec = 0,
    timer = null,
    diff, //时间差
    context, //上下文
    args,
    exec = function() {
      last_exec = curr;
      fn.apply(context, args);
    };
  return function() {
    curr = +new Date();
    context = this,
    args = arguments,
    diff = curr - (debounce ? last_call : last_exec) - delay;
    clearTimeout(timer);

    if (debounce) {
      if (immediate) {
        timer = setTimeout(exec, delay);
      } else if (diff >= 0) {
        exec();
      }
    } else {
      if (diff >= 0) {
        exec();
      } else if (immediate) {
        timer = setTimeout(exec, -diff);
      }
    }

    last_call = curr;
  }
};

/*
 * 空闲控制 返回函数连续调用时,空闲时间必须大于或等于 delay,fn 才会执行
 * @param fn {function}  要调用的函数
 * @param delay   {number}    空闲时间
 * @param immediate  {bool} 给 immediate参数传递false 绑定的函数先执行,而不是delay后后执行。
 * @return {function}   实际调用函数
 */
var debounce = function(fn, delay, immediate) {
  return throttle(fn, delay, immediate, true);
};

// 通过jQuery的特殊事件和自定义事件的结合,封装延迟执行函数

  $.event.special.throttledScroll = {
    setup: function(data) {
      var timer = 0;
      $(this).bind(‘scroll.throttledScroll‘, function(event) {
        if (!timer) {
          timer = setTimeout(function() {
            $(this).triggerHandler(‘throttledScroll‘);
            timer = 0;
          }, 250);
        }
      });
    },
    teardown: function() {
      $(this).unbind(‘scroll.throttledScroll‘);
    }
  };
})(jQuery);
$(document).ready(function() {
  $window.bind(‘throttledScroll‘, checkScrollPosition).trigger(‘throttledScroll‘);
});

获取css的伪元素

:hover, :active, :before……

var bgcolor = window.getComputedStyle(
    document.querySelector(‘.element‘), ‘:before‘
).getPropertyValue(‘background-color‘);

var aFontSize = window.getComputedStyle(document.getElementById("a"), ":hover").fontSize;

js类型判断

  • typeof:不能很好判断obj, null , arr, regexp和自定义对象
  • constructor: 支持大部分对象类型判断,特别是自定义类型对象,但不能在null和undefined上使用
  • String.prototype.toString.call():支持绝大多数类型判断,但不支持自定义类型对象

    var toString = Object.prototype.toString;
    console.log(toString.call(arr)); // [object Array]
    console.log(toString.call(nullObj)); //[object Null]
    console.log(toString.call(user)); // [object Object]不能作进一步的判断

    为什么不直接用obj.toString()?因为obj.toString()返回的是其对象的内容,如数值,字符串,数组等内容,不好做判断

总结:推荐使用Object.prototype.toString.call()方法,因为他能解决绝大部分情况的判断,在遇到返回值为[object Object]时,再使用constructor辅助判断,看是否是自定义对象。

JS常用函数大全

时间: 2024-10-24 19:51:44

JS常用函数大全的相关文章

js 常用函数

document.getElementById("email").setAttribute("属性","属性名");//动态添加ID.class等 document.getElementById("email"). remoAttribute("属性","属性名");//动态删除属性.如ID.Class等 js 常用函数,布布扣,bubuko.com

【javascript】javascript常用函数大全

javascript函数一共可分为五类:   •常规函数   •数组函数   •日期函数   •数学函数   •字符串函数   1.常规函数   javascript常规函数包括以下9个函数:   (1)alert函数:显示一个警告对话框,包括一个OK按钮.   (2)confirm函数:显示一个确认对话框,包括OK.Cancel按钮.   (3)escape函数:将字符转换成Unicode码.   (4)eval函数:计算表达式的结果.   (5)isNaN函数:测试是(true)否(fals

js常用函数整理

前言 整理了一些js常用函数,包括浏览器兼容, 常用字符串处理,获取信息以及移动端信息获取等 ,版本不断补充更新中, 其中大部分函数都已经验证过,如果有错误请及时反馈或者有好的一些工具函数,也可以提出来添加进去,针对相同作用的不同函数, 我会进行优化调整 并且测试,尽可能保证个浏览器兼容,排除冲突等. 先放出50个左右  JS代码如下   可直接copy到JS文件当中,目录不代表顺序,有些函数目录中或许没有显示.如有缺少 还请提出 让我更好的完善.  代码 /** * JSFrame Name:

JS常用函数用途小记

concat() 方法用于连接两个或多个数组. 该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本. var a = [1,2,3]; document.write(a.concat(4,5)); shift() 方法用于把数组的第一个元素从其中删除,并返回第一个元素的值. var arr = new Array(3) arr[0] = "George" arr[1] = "John" arr[2] = "Thomas" document

js常用代码大全

Javascript常用代码大全 //打开模式对话框 <body><script language=javascript> function doSelectUser(txtId){ strFeatures="dialogWidth=500px;dialogHeight=360px;center=yes;middle=yes ;help=no;status=no;scroll=no"; var url,strReturn; url="selUser.a

js常用函数和常用技巧

学习和工作的过程中总结的干货,包括常用函数.常用js技巧.常用正则表达式.git笔记等.为刚接触前端的童鞋们提供一个简单的查询的途径,也以此来缅怀我的前端学习之路. PS:此文档,我会持续更新. Ajax请求 jquery ajax函数 我自己封装了一个ajax的函数,代码如下: var Ajax = function(url, type success, error) { $.ajax({ url: url, type: type, dataType: 'json', timeout: 100

【转】JNI学习积累之一 ---- 常用函数大全

原文网址:http://blog.csdn.net/qinjuning/article/details/7595104 本文原创,转载请注明出处:http://blog.csdn.net/qinjuning 最近一段时间,在工作方面比较闲,分配的Bug不是很多,于是好好利用这段时间就着源代码看了些许模块, 主要方式 还是贼看贼看代码, 同时利用烧机的便利,加Log观看,基本上都能弄个脸熟 .心里想着该写点什么了?可是水平不够,再加上 包括很多真正实现地方--中间层,基本上没看.于是乎,也就不好卖

[转载]JNI学习积累之一 ---- 常用函数大全

本文转载于:http://blog.csdn.net/qinjuning 最近一段时间,在工作方面比较闲,分配的Bug不是很多,于是好好利用这段时间就着源代码看了些许模块, 主要方式 还是贼看贼看代码, 同时利用烧机的便利,加Log观看,基本上都能弄个脸熟 .心里想着该写点什么了?可是水平不够,再加上 包括很多真正实现地方--中间层,基本上没看.于是乎,也就不好卖弄了. 花了几天时间研究了下JNI,基本上知道如何使用了.照我的观点JNI还是不难的,难得只是我们一份尝试的心. 学习过程中, 发现关

delphi常用函数大全(转)

Abort函数引起放弃的意外处理Abs函数绝对值函数AddExitProc函数将一过程添加到运行时库的结束过程表中Addr函数返回指定对象的地址AdjustLineBreaks函数将给定字符串的行分隔符调整为CR/LF序列Align属性使控件位于窗口某部分Alignment属性控件标签的文字位置AllocMem函数在堆栈上分配给定大小的块AllowGrayed属性允许一个灰度选择AnsiCompareStr函数比较字符串(区分大小写)AnsiCompareText函数比较字符串(不区分大小写)A