本文首发于我的博客
- 常用工具函数
- Array
- js删除数组指定item
- js删除指定index的item
- 递归遍历数组成员并输出
- JS插入排序
- BOM
- 判断浏览器
- 手机类型判断
- 获取当前js的版本
- 判断浏览器是否支持CSS3属性
- 阻止事件冒泡
- 加入收藏
- 实现设为首页
- String
- JS 替换非法字符主要用在密码验证上出现的特殊字符
- Js 去掉空格方法
- 字符串截取方法
- 求一个字符串长度
- js实现解析URL参数, 返回一个对象
- Date
- JS判断两个日期大小 适合 2012 - 09 - 09 与2012 - 9 - 9 两种格式的对比
- 获取当前时间
- 获取前num天的日期
- DOM
- 增加/移除事件
- js实时计算rem,宽度大于1920px时1rem=100px
- 绑定按钮回车触发单机事件
- 按Ctrl + Entert 直接提交表单
- 全选 / 全不选
- 原生JS获取鼠标XY轴的值
- JS实现添加事件兼容函数
- JS获取某元素以浏览器左上角为原点的坐标(有问题)
- JS获取鼠标X.Y轴坐标
- Object
- js实现对象的深Clone
- Math
- JS 生成范围随机整数
- XML
- 转成XML对象
- Array
- 常用例子
- Js身份证验证函数
- JS 执行计时器
- JS写入Cookie
- JS 读Cookie
- 原生Ajax 请求
- JS 加载到顶部LoadJS
- 清空 LoadJS 加载到顶部的js引用
- js 动态移除 head 里的 js 引用
- 整个URL 点击事件 加在UL里的onclick里
常用工具函数
Array
js删除数组指定item
Array.prototype.removeByValue = function (val) {
for (var i = 0; i < this.length; i++) {
if (this[i] == val) {
this.splice(i, 1);
break;
}
}
}
js删除指定index的item
Array.prototype.remove = function (dx) {
if (isNaN(dx) || dx > this.length) {
return false;
}
for (var i = 0, n = 0; i < this.length; i++) {
if (this[i] != this[dx]) {
this[n++] = this[i]
}
}
this.length -= 1
}
递归遍历数组成员并输出
//函数 printArray 使用了递归方式,逐一输出数组中的每个成员,中间以空格隔开。
//@arr :应是数组类型
function printArray(arr) {
for (var i in arr) {
if (arr[i] instanceof Array) {
printArray(arr[i]);
} else {
document.write(arr[i] + '');
}
}
}
JS插入排序
//此方法排序从小到大
//@arr :应是数组类型
function insertionSort(arr) {
//从第二个元素开始
for (var i = i; i < arr.length; i++) {
//取出待比较的元素
var k = arr[i];
//像前找,找到比当前元素大的位置
var j;
for (j = i - 1; j >= 0 && k < arr[j]; j--) {
//向后移动一位
arr[j + 1] = arr[j];
}
//插入元素
arr[j + 1] = k;
}
}
BOM
判断浏览器
function getOs() {
if (navigator.userAgent.indexOf("MSIE 8.0") > 0) {
return "MSIE8";
} else if (navigator.userAgent.indexOf("MSIE 6.0") > 0) {
return "MSIE6";
} else if (navigator.userAgent.indexOf("MSIE 7.0") > 0) {
return "MSIE7";
} else if (isFirefox = navigator.userAgent.indexOf("Firefox") > 0) {
return "Firefox";
}
if (navigator.userAgent.indexOf("Chrome") > 0) {
return "Chrome";
} else {
return "Other";
}
}
手机类型判断
var BrowserInfo = {
userAgent: navigator.userAgent.toLowerCase(),
isAndroid: Boolean(navigator.userAgent.match(/android/ig)),
isIphone: Boolean(navigator.userAgent.match(/iphone|ipod/ig)),
isIpad: Boolean(navigator.userAgent.match(/ipad/ig)),
isWeixin: Boolean(navigator.userAgent.match(/MicroMessenger/ig)),
}
获取当前js的版本
function getjsversion() {
var n = navigator;
var u = n.userAgent;
var apn = n.appName;
var v = n.appVersion;
var ie = v.indexOf('MSIE ');
if (ie > 0) {
apv = parseInt(i = v.substring(ie + 5));
if (apv > 3) {
apv = parseFloat(i);
}
} else {
apv = parseFloat(v);
}
var isie = (apn == 'Microsoft Internet Explorer');
var ismac = (u.indexOf('Mac') >= 0);
var javascriptVersion = "1.0";
if (String && String.prototype) {
javascriptVersion = '1.1';
if (javascriptVersion.match) {
javascriptVersion = '1.2';
var tm = new Date;
if (tm.setUTCDate) {
javascriptVersion = '1.3';
if (isie && ismac && apv >= 5) javascriptVersion = '1.4';
var pn = 0;
if (pn.toPrecision) {
javascriptVersion = '1.5';
a = new Array;
if (a.forEach) {
javascriptVersion = '1.6';
i = 0;
o = new Object;
tcf = new Function('o', 'var e,i=0;try{i=new Iterator(o)}catch(e){}return i');
i = tcf(o);
if (i && i.next) {
javascriptVersion = '1.7';
}
}
}
}
}
}
return javascriptVersion;
}
判断浏览器是否支持CSS3属性
/**
* 判断是否支持css3
*
* @param {string} style CSS属性
* @returns
*/
function supportCss3(style) {
var prefix = ['webkit', 'Moz', 'ms', 'o'],
i,
humpString = [],
htmlStyle = document.documentElement.style,
_toHumb = function (string) {
return string.replace(/-(\w)/g, function ($0, $1) {
return $1.toUpperCase();
});
};
for (i in prefix)
humpString.push(_toHumb(prefix[i] + '-' + style));
humpString.push(_toHumb(style));
for (i in humpString)
if (humpString[i] in htmlStyle) return true;
return false;
}
阻止事件冒泡
//@e :事件对象
function stopPP(e) {
var evt = e || window.event;
//IE用cancelBubble=true来阻止而FF下需要用stopPropagation方法
evt.stopPropagation ? evt.stopPropagation() : (evt.cancelBubble = true);
}
加入收藏
/**
* 加入收藏
*
* @param {String} sURL
* @param {any} sTitle
*/
function AddFavorite(sURL, sTitle) {
sURL = encodeURI(sURL);
try {
window.external.addFavorite(sURL, sTitle);
} catch (e) {
try {
window.sidebar.addPanel(sTitle, sURL, "");
} catch (e) {
alert("加入收藏失败");
}
}
}
实现设为首页
/**
* 实现设为首页
*
* @param {String} url
*/
function SetHome(url) {
if (document.all) {
document.body.style.behavior = 'url(#default#homepage)';
document.body.setHomePage(url);
} else {
alert("设为首页失败");
}
}
String
JS 替换非法字符主要用在密码验证上出现的特殊字符
function URLencode(sStr) {
return escape(sStr).replace(/\+/g, '%2B').replace(/\"/g, '%22').replace(/\'/g, '%27').replace(/\//g, '%2F');
};
Js 去掉空格方法
String.prototype.Trim = function () {
return this.replace(/(^\s*)|(\s*$)/g, "");
}
String.prototype.LTrim = function () {
return this.replace(/(^\s*)/g, "");
}
String.prototype.RTrim = function () {
return this.replace(/(\s*$)/g, "");
}
字符串截取方法
function getCharactersLen(charStr, cutCount) {
if (charStr == null || charStr == '') return '';
var totalCount = 0;
var newStr = '';
for (var i = 0; i < charStr.length; i++) {
var c = charStr.charCodeAt(i);
if (c < 255 && c > 0) {
totalCount++;
} else {
totalCount += 2;
}
if (totalCount >= cutCount) {
newStr += charStr.charAt(i);
break;
} else {
newStr += charStr.charAt(i);
}
}
return newStr;
}
求一个字符串长度
//@ str:传入一个字符串返回该字符串的长度
//PS:假设一个中文占两个字节,一个英文占用一个字节
function getBytes(str) {
var len = str.length,
//假如全英文字符串则代表字节长度与字符串长度相同
bytes = len,
i = 0;
//循环遍历字符串获取相对应的Unicode 编码,
for (i = 0; i < len; i++) {
if (str[i].charCodeAt() > 255) {
bytes++;
}
}
return bytes;
}
js实现解析URL参数, 返回一个对象
/**
* js实现解析URL参数, 返回一个对象
*
* @param {String} url 传入一个地址串,例如"http://www.baidu.com/index.php?key=0&key=1&key=2”
* @returns
*/
function parseQuerystring(url) {
var params = {}, //声明一个数组来存放返回的对象
arr = url.split('?'); //将url地址与参数分割开来
if (arr.length <= 1) { //如果没有参数则代表arr.length长度<=1
return params;
}
arr = arr[1].split('&'); //解析后面的参数并返回数组
//循环遍历arr数组
for (var i = 0, l = arr.length; i < l; i++) {
var a = arr[i].split('=');
params[a[0]] = a[1]; //将分割后的参数以键值对形式存入params
}
return params;
}
function GetQueryStringRegExp(name, url) {
var reg = new RegExp("(^|\\?|&)" + name + "=([^&]*)(\\s|&|$)", "i");
if (reg.test(url)) return decodeURIComponent(RegExp.$2.replace(/\+/g, " "));
return "";
}
Date
JS判断两个日期大小 适合 2012 - 09 - 09 与2012 - 9 - 9 两种格式的对比
//得到日期值并转化成日期格式,replace(/\-/g, "\/")是根据验证表达式把日期转化成长日期格式,这样再进行判断就好判断了
function ValidateDate() {
var beginDate = $("#t_datestart").val();
var endDate = $("#t_dateend").val();
if (beginDate.length > 0 && endDate.length > 0) {
var sDate = new Date(beginDate.replace(/\-/g, "\/"));
var eDate = new Date(endDate.replace(/\-/g, "\/"));
if (sDate > eDate) {
alert('开始日期要小于结束日期');
return false;
}
}
}
获取当前时间
function GetCurrentDate() {
var d = new Date();
var y = d.getYear() + 1900;
month = add_zero(d.getMonth() + 1),
days = add_zero(d.getDate()),
hours = add_zero(d.getHours());
minutes = add_zero(d.getMinutes()),
seconds = add_zero(d.getSeconds());
var str = y + '-' + month + '-' + days + ' ' + hours + ':' + minutes + ':' + seconds;
function add_zero(temp) {
if (temp < 10){
return "0" + temp;
}
return temp;
}
return str;
};
获取前num天的日期
/**
* 公有方法:获取前num天的日期
*
* @param {Number} num 自动向上取整
* @param {boolean} order true是日期从大到小,false是从小到大
* @returns MM-dd
*/
function getTodayDate(num, order = false) {
debugger
num = Math.ceil(num)
let arr_Date = []
for (var i = 0; i < num; i++) {
let date = new Date(new Date().getTime() - (i * 24 * 60 * 60 * 1000))
let currMonth = new Date(date).getMonth() + 1
let currDay = new Date(date).getDate()
let result = `${currMonth.toString().length < 2 ? `0${currMonth}` : currMonth}-${currDay.toString().length < 2 ? `0${currDay}` : currDay}`;
if (order) {
arr_Date.push(result);
} else {
arr_Date.unshift(result);
}
}
// console.log(arr_Date);
return arr_Date;
}
console.log(getTodayDate(7));
DOM
增加/移除事件
var EventUtil = {
addHandler:function(element,type,handler){
if(element.addEventListener){//检测是否存在DOM2
element.addEventListener(type,handler,false)
}else if(element.attachEvent){//存在ie
element.attachEvent('on'+type,handler)
}else{//DOM0
element['on'+type]=handelr;
}
},
removeHandler:function(element,type,handler){
if(element.removeEventListener){
element.removeEventListener(type,handler,false);
}else if(element.detachEvent){
element.detachEvent('on'+type,handler);
}else{
element['on'+type]=null;
}
}
}
//使用
var btn = document.getElementById('myBtn');
var handler = function(){
console.log('hi')
}
EventUtil.addHandler(btn,'click',handler);
EventUtil.removeHandler(btn,'click',handler);
js实时计算rem,宽度大于1920px时1rem=100px
(function (doc, win) {
var docEl = doc.documentElement,
resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize',
recalc = function () {
var clientWidth = docEl.clientWidth;
if (!clientWidth) return;
if (clientWidth >= 1920) {
docEl.style.fontSize = '100px';
} else {
docEl.style.fontSize = 100 * (clientWidth / 1920) + 'px';
}
};
if (!doc.addEventListener) return;
win.addEventListener(resizeEvt, recalc, false);
doc.addEventListener('DOMContentLoaded', recalc, false);
})(document, window);
绑定按钮回车触发单机事件
$("id").onkeypress = function (event) {
event = (event) ? event : ((window.event) ? window.event : "")
keyCode = event.keyCode ? event.keyCode : (event.which ? event.which : event.charCode);
if (keyCode == 13) {
$("SubmitLogin").onclick();
}
}
按Ctrl + Entert 直接提交表单
document.body.onkeydown = function (evt) {
evt = evt ? evt : (window.event ? window.event : null);
if (13 == evt.keyCode && evt.ctrlKey) {
evt.returnValue = false;
evt.cancel = true;
PostData();
}
};
全选 / 全不选
function selectAll(objSelect) {
if (objSelect.checked == true) {
$("input[name='chkId']").attr("checked", true);
$("input[name='chkAll']").attr("checked", true);
} else if (objSelect.checked == false) {
$("input[name='chkId']").attr("checked", false);
$("input[name='chkAll']").attr("checked", false);
}
}
原生JS获取鼠标XY轴的值
/**
* 原生JS获取鼠标XY轴的值
*
* @param {Object} evt
* @returns
*/
function mousePosition(evt) {
evt = evt || window.event;
//Mozilla
if (evt.pageX || evt.pageY) {
return {
x: evt.pageX,
y: evt.pageY
}
}
//IE
return {
x: evt.clientX + document.body.scrollLeft - document.body.clientLeft,
y: evt.clientY + document.body.scrollTop - document.body.clientTop
}
}
//获取X轴坐标
function getX(evt) {
evt = evt || window.event;
return mousePosition(evt).x;
}
//获取Y轴坐标
function getY(evt) {
evt = evt || window.event;
return mousePosition(evt).y;
}
//外部函数调用1
document.getElementById("x").onclick = function (evt) {
alert(getX(evt))
}
//外部函数调用2
function showXY(evt) {
evt = evt || window.event;
document.getElementById("n").innerHTML = "" + getX(evt);
}
window.onload = function () {
document.body.onmousemove = showXY;
}
1.在IE中,event对象是全局的,它被存储在window.event中,对于Firefox,及其他的浏览器来说,这个事件将被传递到任何指向这个页面动作的函数中。可以通过传递参数获取。
2.document.body.scrollTop是网页被卷去的高,具有 DTD 时用 document.documentElement.scrollTop 代替 document.body.scrollTop ,否则取不到值。
3.Firefox和其他的浏览器使用event.pageX和event.pageY来表示鼠标相对于document文档的位置。如果你有一个500500的窗口,并且鼠标位于窗口中间,那么pageX和pageY的值将都是250。如果你将窗口向下滚动500象素,pageY的值为750。 如此相反的是,微软的IE使用event.clientX和event.clientY来表示鼠标相对于window窗口的位置,而不是当前document文档。在相同的例子中,如果将鼠标放置于500500窗口的中间,clientX和clientY值将均为250。如果向下滚动页面,clientY将仍为250,因为它是相对于window窗口来测量,而不是当前的document文档。因此,在鼠标位置中,我们应该引入document文档body区域的scrollLeft和scrollTop属性。最后,IE中document文档实际并不在(0,0)的位置,在它周围有一个小(通常有2px)边框,document.body.clientLeft和document.body.clientTop包含了这个边框的宽度。所有用
evt.clientX + document.body.scrollLeft - document.body.clientLeft //在IE中获得
JS实现添加事件兼容函数
/**
* 公有函数:"事件处理"兼容函数
*
* @param {Object} evnentObj 需要添加事件的对象
* @param {String} eventType 添加触发事件的类型,如click,不需要加on
* @param {function} fn 事件函数
* @param {Boolean} useCapture
*/
function addEvent(evnentObj, eventType, fn, useCapture) {
if (evnentObj.addEventListener) {
evnentObj.addEventListener(eventType, fn, false, useCapture); //DOM 2.0
} else if (evnentObj.attachEvent) {
evnentObj.attachEvent('on' + eventType, fn); //IE5+
} else {
evnentObj['on' + eventType] = fn; //DOM 0.0
}
}
JS获取某元素以浏览器左上角为原点的坐标(有问题)
/**
* 公有函数:获取某元素以浏览器左上角为原点的坐标
*
* @param {Object} obj
* @returns
*/
function getPoint(obj) {
var top = obj.offsetTop; //获取该元素对应父容器的上边距
var left = obj.offsetLeft; //对应父容器的上边距
var objPoint = {};
//判断是否有父容器,如果存在则累加其边距
while (obj = obj.offsetParent) {
top += obj.offsetTop;
left += obj.offsetLeft;
}
objPoint.top = top;
objPoint.left = left;
return objPoint;
}
JS获取鼠标X.Y轴坐标
function mousePosition(evt) {
evt = evt || window.event;
//Mozilla
if (evt.pageX || evt.pageY) {
return {
x: evt.pageX,
y: evt.pageY
}
}
//IE
return {
x: evt.clientX + document.body.scrollLeft - document.body.clientLeft,
y: evt.clientY + document.body.scrollTop - document.body.clientTop
}
}
Object
js实现对象的深Clone
//PS:深度克隆:所有元素或属性均完全复制,与原对象完全脱离,也就是说所有对于新对象的修改都不会反映到原对象中。
function cloneObject(o) {
//首先对传入的对象进行类型判断,
if (!o || "object" !== typeof o) {
return o;
}
var c = "function" === typeof o.pop ? [] : {};
var p, v;
for (p in o) {
if (o.hasOwnProperty(p)) {
v = o[p];
if (v && 'object' === typeof v) {
c[p] = Ext.ux.clone(v);
} else {
c[p] = v;
}
}
}
return c;
};
Math
JS 生成范围随机整数
// JS 生成范围随机整数
/**
* 生成从minNum到maxNum的随机整数
* @param {number} minNum
* @param {number} maxNum
* @param {boolean} [status=true] 生成整数 false生成小数
* @returns
*/
function randomNum(minNum, maxNum, status = true) {
let result;
console.log(arguments.length);
switch (arguments.length) {
case 1:
result = parseInt(Math.random() * minNum + 1, 10);
break
case 2:
result = parseInt(Math.random() * (maxNum - minNum + 1) + minNum, 10);
break
case 3:
if (status) {
result = parseInt(Math.random() * (maxNum - minNum + 1) + minNum, 10);
break
} else {
result = Math.random() * (maxNum - minNum + 1) + minNum;
break
}
default:
result = 0;
break
}
return result;
}
XML
转成XML对象
/**
* 转成XML对象
*
* @param {String} str 一个xml格式的串
* @returns
*/
function createXml(str) {
if (document.all) {
var xmlDom = new ActiveXObject("Microsoft.XMLDOM")
xmlDom.loadXML(str)
return xmlDom
}
else
return new DOMParser().parseFromString(str, "text/xml")
}
常用例子
格式化数字串
/**
* 格式化数字串
* @param {String} str 源字符串
* @param {Number} size 每隔几个字符进行分割 默认3
* @param {String} delimiter delimiter-分割符 默认','
*/
function formatText(str, size = 3, delimiter = ',') {
let _str = str.toString(),
regText = '\\d{1,' + size + '}(?=(\\d{' + size + '})+$)',
reg = new RegExp(regText, 'g');
return _str.replace(/^(-?)(\d+)((\.\d+)?)$/,
function ($0, $1, $2, $3) {
return $1 + $2.replace(reg, `$&${delimiter}`) + $3;
})
}
Js身份证验证函数
// 二代身份证号码为 18 位,其最后一位(第 18 位)的计算方法为:
// 1、 将前面的身份证号码 17 位数分别乘以不同的系数。从第一位到第十七位的系数分别 为:7-9-10-5-8-4-2-1-6-3-7-9-10-5-8-4-2
// 2、 将这 17 位数字和系数相乘的结果相加
// 3、 用加出来和除以 11,看余数是多少?
// 4、 余数只可能有 0-1-2-3-4-5-6-7-8-9-10 这 11 个数字。
// 每个数字所对应的 最后一位身份证的号码为:1-0-X-9-8-7-6-5-4-3-2
// 即,如果余数是是 2,就会在身份证的第 18 位数字上出现罗马数字的X。如果余数是 10,身份证的最后一位号码就 是 2
// 身份验证函数
function Authentication() {
const arrXishu = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]; //声明系数数组
var arrch = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2']; //声明最后一位身份证号码的数组
var idcard = document.getElementById("IdCard").value;
var arrIdcard = idcard.split(""); //字符串转化为数组
var sum = 0;
if (arrIdcard.length != 18) {
return alert("输入的号码有误");
} else {
for (var index = 0; index < arrXishu.length; index++) {
sum += parseInt(arrXishu[index]) * arrXishu[index];
}
let c = sum % 11;
let code = arrch(c);
if (code == arrIdcard.charAt(17)) {
alert("身份证号码正确");
} else {
alert("身份证号码错误");
}
}
}
JS 执行计时器
timeStart = new Date().getTime();
timesEnd = new Date().getTime();
document.getElementById("time").innerHTML = timesEnd - timeStart;
JS写入Cookie
function setCookie(name, value, expires, path, domain) {
if (!expires) expires = -1;
if (!path) path = "/";
var d = "" + name + "=" + value;
var e;
if (expires < 0) {
e = "";
} else if (expires == 0) {
var f = new Date(1970, 1, 1);
e = ";expires=" + f.toUTCString();
} else {
var now = new Date();
var f = new Date(now.getTime() + expires * 1000);
e = ";expires=" + f.toUTCString();
}
var dm;
if (!domain) {
dm = "";
} else {
dm = ";domain=" + domain;
}
document.cookie = name + "=" + value + ";path=" + path + e + dm;
};
JS 读Cookie
function readCookie(name) {
var nameEQ = name + "=";
var ca = document.cookie.split(';');
for (var i = 0; i < ca.length; i++) {
var c = ca[i];
while (c.charAt(0) == ' ') c = c.substring(1, c.length);
if (c.indexOf(nameEQ) == 0) {
return decodeURIComponent(c.substring(nameEQ.length, c.length))
}
}
return null
}
原生Ajax 请求
function jsAjax(args) {
var self = this;
this.options = {
type: 'GET',
async: true,
contentType: 'application/x-www-form-urlencoded',
url: 'about:blank',
data: null,
success: {},
error: {}
};
this.getXmlHttp = function () {
var xmlHttp;
try {
xmlhttp = new XMLHttpRequest();
} catch (e) {
try {
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
}
if (!xmlhttp) {
alert('您的浏览器不支持AJAX');
return false;
}
return xmlhttp;
};
this.send = function () {
C.each(self.options, function (key, val) {
self.options[key] = (args[key] == null) ? val : args[key];
});
var xmlHttp = new self.getXmlHttp();
if (self.options.type.toUpperCase() == 'GET') {
xmlHttp.open(self.options.type, self.options.url + (self.options.data == null ? "" : ((/[?]$/.test(self.options.url) ? '&' : '?') + self.options.data)), self.options.async);
} else {
xmlHttp.open(self.options.type, self.options.url, self.options.async);
xmlHttp.setRequestHeader('Content-Length', self.options.data.length);
}
xmlHttp.setRequestHeader('Content-Type', self.options.contentType);
xmlHttp.onreadystatechange = function () {
if (xmlHttp.readyState == 4) {
if (xmlHttp.status == 200 || xmlHttp.status == 0) {
if (typeof self.options.success == 'function') self.options.success(xmlHttp.responseText);
xmlHttp = null;
} else {
if (typeof self.options.error == 'function') self.options.error('Server Status: ' + xmlHttp.status);
}
}
};
xmlHttp.send(self.options.type.toUpperCase() == 'POST' ? self.options.data.toString() : null);
};
this.send();
};
JS 加载到顶部LoadJS
function loadJS(url, fn) {
var ss = document.getElementsByName('script'),
loaded = false;
for (var i = 0, len = ss.length; i < len; i++) {
if (ss[i].src && ss[i].getAttribute('src') == url) {
loaded = true;
break;
}
}
if (loaded) {
if (fn && typeof fn != 'undefined' && fn instanceof Function) fn();
return false;
}
var s = document.createElement('script'),
b = false;
s.setAttribute('type', 'text/javascript');
s.setAttribute('src', url);
s.onload = s.onreadystatechange = function () {
if (!b && (!this.readyState || this.readyState == 'loaded' || this.readyState == 'complete')) {
b = true;
if (fn && typeof fn != 'undefined' && fn instanceof Function) fn();
}
};
document.getElementsByTagName('head')[0].appendChild(s);
};
function bind(objId, eventType, callBack) { //适用于任何浏览器的绑定
var obj = document.getElementById(objId);
if (obj.addEventListener) {
obj.addEventListener(eventType, callBack, false);
} else if (window.attachEvent) {
obj.attachEvent('on' + eventType, callBack);
} else {
obj['on' + eventType] = callBack;
}
}
function JSLoad(args) {
s = document.createElement("script");
s.setAttribute("type", "text/javascript");
s.setAttribute("src", args.url);
s.onload = s.onreadystatechange = function () {
if (!s.readyState || s.readyState == "loaded" || s.readyState == "complete") {
if (typeof args.callback == "function") args.callback(this, args);
s.onload = s.onreadystatechange = null;
try {
s.parentNode && s.parentNode.removeChild(s);
} catch (e) {}
}
};
document.getElementsByTagName("head")[0].appendChild(s);
}
清空 LoadJS 加载到顶部的js引用
function ClearHeadJs(src) {
var js = document.getElementsByTagName('head')[0].children;
var obj = null;
for (var i = 0; i < js.length; i++) {
if (js[i].tagName.toLowerCase() == "script" && js[i].attributes['src'].value.indexOf(src) > 0) {
obj = js[i];
}
}
document.getElementsByTagName('head')[0].removeChild(obj);
};
js 动态移除 head 里的 js 引用
function ClearHeadJs(src) {
var js = document.getElementsByTagName('head')[0].children;
var obj = null;
for (var i = 0; i < js.length; i++) {
if (js[i].tagName.toLowerCase() == "script" && js[i].attributes['src'].value.indexOf(src) > 0) {
obj = js[i];
}
}
document.getElementsByTagName('head')[0].removeChild(obj);
};
整个URL 点击事件 加在UL里的onclick里
function CreateFrom(url, params) {
var f = document.createElement("form");
f.setAttribute("action", url);
for (var i = 0; i < params.length; i++) {
var input = document.createElement("input");
input.setAttribute("type", "hidden");
input.setAttribute("name", params[i].paramName);
input.setAttribute("value", params[i].paramValue);
f.appendChild(input);
}
f.target = "_blank";
document.body.appendChild(f);
f.submit();
};
获取地址栏某个参数的字段
/**
* 获取地址栏某个参数的字段
*
* @param {any} name
* @returns
*/
function GetQueryString(name) {
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
var r = window.location.search.substr(1).match(reg);
if (r != null) return unescape(r[2]);
return null;
}