标签:des style color java 使用 os io strong
这个是个比较好的方法,一个弹出窗口,要设定在任何其他地方点击这个窗口会自动消失,但点这个窗口内部是没事的。那么就要用到这个方法了。
// (对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();
});
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;
}
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+\.)*\w+@\w+(?:\.\w+)+$/i; reEmail.test( "abc@abc.com" ), // true reEmail.test( "abc.@abc.com" ), // false reEmail.test( "abc.def@abc.com" ), // true reEmail.test( "abc@abc.def.cn" ); // true
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.”字符串
function base64Encode(str) {
return btoa(unescape(encodeURIComponent(str)));
}
function base64Decode(str) {
return decodeURIComponent(escape(atob(str)));
}
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;
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.requestAnimFrame = function() {
return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || function(e, t) {
return window.setTimeout(e, 1e3 / 60)
};
}();
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"}
/*
* 频率控制 返回函数连续调用时,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‘);
});
:hover, :active, :before……
var bgcolor = window.getComputedStyle(
document.querySelector(‘.element‘), ‘:before‘
).getPropertyValue(‘background-color‘);
var aFontSize = window.getComputedStyle(document.getElementById("a"), ":hover").fontSize;
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辅助判断,看是否是自定义对象。
标签:des style color java 使用 os io strong
原文地址:http://my.oschina.net/luozt/blog/300571