/*
* 序列化
* */
var serialize = function(json){
var str = '';
for(var attr in json){
str += attr + '=' +json[attr] + '&';
}
return str.substr(0,str.length-1);
}
/*
* 遍历元素
* callback 会传入index,el 当前元素
* this指向当前对象
* */
var each = function(array,callback){
if (Object.prototype.toString.call(array) !== '[object Array]') return;
for(var i= 0,len = array.length;i<len;i++){
callback.call(array[i],i,array[i]);
}
}
/*
* 数据排序-按中文拼音字母
* */
var dataSort = function(data){
return data.sort(function(a,b){
return a.msg.localeCompare(b.msg);
})
}
/*
* ajax 封装
* */
var ajax = function(config){
var xhr = window.XMLHttpRequest ?
new XMLHttpRequest() :
new ActiveXObject('Microsofr.XMLHTTP');
xhr.onreadystatechange = function(){
if(xhr.readyState == 4 && xhr.status == 200){
config.success && config.success(xhr);
}
}
if(config.method){
xhr.open(config.method,config.url,true);
config.method == 'get' ?
xhr.send() :
(xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded"),
xhr.send(serialize(config.data)));
}
};
//获取元素的纵坐标
function getTop(e) {
var offset = e.offsetTop;
if (e.offsetParent != null) offset += arguments.callee(e.offsetParent);
return offset;
}
//获取元素的横坐标
function getLeft(e) {
var offset = e.offsetLeft;
if (e.offsetParent != null) offset += arguments.callee(e.offsetParent);
return offset;
}
一、将noedeList对象转换成数组
伪数组nodeList,不能直接使用数组方法slice()
var arrify = function(list){
<span style="white-space:pre"> </span>return Array.prototype.slice.call(list);
}
一、去掉一个字符串的首尾空格
function trim(s){
<span style="white-space:pre"> </span>return s.replace(/(^\s*)|(\s*$)/g,"");//正则表达式,去掉首尾空格
}
一、得到一个字符串的字节长度
function getBytesLength(str){
var len = str.length;
for (var i = 0; i < str.length; i++) {
if(str.charCodeAt(i) > 255){ //unicode 字符编码,中文都是>255的
len++;
}
}
return len;
}
一、得到dom对象的某css属性
function getStyle(obj,attr){
if(obj.currentStyle){
return obj.currentStyle[attr];
}else
{
return getComputedStyle(obj,false)[attr];
}
}
二、按class查找dom对象集合
function getByClass(oParent,sClass){
var aEle = oParent.getElementsByTagName('*');
var results = [];
for (var i = 0; i < aEle.length; i++) {
var obj = aEle[i];
if(obj.className == sClass){
results.push(obj);
}
}
return results;
}
三、给某dom对象设置css属性集
function setStyle(obj,json){
for(var atrr in json){
obj.style[atrr] = json[atrr];
}
}
一、检测浏览器类型
function userBrowser(){
var browserName=navigator.userAgent.toLowerCase();
if(/msie/i.test(browserName) && !/opera/.test(browserName)){
alert("IE");
return ;
}else if(/firefox/i.test(browserName)){
alert("Firefox");
return ;
}else if(/chrome/i.test(browserName) && /webkit/i.test(browserName) && /mozilla/i.test(browserName)){
alert("Chrome");
return ;
}else if(/opera/i.test(browserName)){
alert("Opera");
return ;
}else if(/webkit/i.test(browserName) &&!(/chrome/i.test(browserName) && /webkit/i.test(browserName) && /mozilla/i.test(browserName))){
alert("Safari");
return ;
}else{
alert("unKnow");
}
}
二、对象克隆
//克隆有两种方法:一种是“浅克隆”,一种是“深克隆”(深度克隆)。
//浅克隆:基本类型为值传递,对象仍为引用传递。
//深克隆(深度克隆):所有元素均完全复制,并于原对象完全独立(原对象的修改不影响新对象)。
//深度克隆的代码如下(深克隆去掉递归即为浅克隆):
Object.prototype.clone = function () {
var o = this.constructor === Array ? [] : {};
for (var e in this) {
o[e] = typeof this[e] === "object" ? this[e].clone() : this[e];
}
return o;
}
三、实现Hashtable
function Hashtable(array)//自定义hashtable
{
this.length = 0;
this._hash = new Object();
}
Hashtable.prototype.put = function (key, value) {
if (typeof (key) != "undefined") {
if (this.containsKey(key) == false) {
this._hash[key] = typeof (value) == "undefined" ? null : value;
this.length++;
return true;
} else {
return false;
}
} else {
return false;
}
}
Hashtable.prototype.remove = function (key) {
if (this.containsKey(key)) {
delete this._hash[key];
this.length--;
}
};
Hashtable.prototype.size = function () {
return this.length;
};
Hashtable.prototype.get = function (key) {
return this._hash[key];
};
Hashtable.prototype.containsKey = function (key) {
return (key in this._hash);//in可以用于检测属性是否存在
};
Hashtable.prototype.containsValue = function (value) {
for (var k in this._hash) {
if (this._hash[k] == value) {
return true;
}
}
return false;
};
Hashtable.prototype.clear = function () {
for (var k in this._hash) {
delete this._hash[k];
}
};
Hashtable.prototype.keys = function () {
var keys = new Array();
for (var k in this._hash) {
keys.push(k);
}
return keys;
};
Hashtable.prototype.values = function () {
var values = new Array();
for (var k in this._hash) {
values.push(this._hash[k]);
}
return values;
};
四、将指定节点插入到 某节点之后
function insertAfter(newNode, targetNode) {
if (targetNode.parentNode.lastChild == targetNode) {
targetNode.parentNode.appendChild(newNode);
} else {
targetNode.parentNode.insertBefore(newNode, targetNode.nextSibling);
}
}
五、时间倒数计时程序
function time() {
var endtime = new Date("2014/04/01,23:06:30");
var nowtime = new Date();
//两时间差为毫秒数,除以1000则转换为秒数
var leftsecond = parseInt((endtime.getTime() - nowtime.getTime()) / 1000);
d = parseInt(leftsecond / (3600 * 24)); //计算出相差天数
h = parseInt((leftsecond / 3600) % 24); //计算出总小时,再取余(每过60小时,重新计算)
m = parseInt((leftsecond / 60) % 60); //计算出总分钟数,再取余
s = parseInt(leftsecond % 60); //直接取余
alert(d + '天' + h + "小时" + m + "分" + s + "秒");
//setTimeout(time,1000);//每个一秒刷新一次数据
}
六、去掉一个数组中的重复元素
function single(arry) {
var temp = [];
var result = [];
for (var i = 0; i < arry.length; i++) {
if (!temp[arry[i]]) {
temp[arry[i]] = 1;
result.push(arry[i]);
}
}
return result;
}
七、判断一个字符串中出现次数最多的字符,统计这个次数
function timecount(str) {
var hash = {};
for (var i = 0; i < str.length; i++) {
if (!hash[str[i]]) {
hash[str[i]] = 1;
} else {
hash[str[i]]++;
}
}
var maxkey, maxvalue = 0;
for (var temp in hash) {
if (hash[temp] > maxvalue) {
maxkey = temp;
maxvalue = hash[temp];
}
}
alert(maxkey + "/" + maxvalue);
}
八、把URL参数解析为一个对象
function parseQueryString(url){
var obj = {};
var temp1 = url.split('?');
if(temp1.length > 1){
obj['target'] = temp1[0];
var temp2 = temp1[1].split('&');
for (var i = 0; i < temp2.length; i++) {
var aaa = temp2[i].split('=');
obj[aaa[0]] = aaa[1];
}
return obj;
}else{
obj['target'] = url;
return obj;
}
}
九、跨浏览器控制台日志打印
function log(message){
if(typeof console =='object'){
console.log(message);
}else if(typeof opera == 'object'){
opera.postError(message);
}else if(typeof java == 'object' && typeof java.lang =='object'){
java.lang.System.out.println(message);
}
}
十、跨浏览器得到选择的文本
function getSelectedText(textbox){
if(document.selection){
return document.selection.createRange().text;
}else{
return textbox.value.substring(textbox.selectionStart,textbox.selectionEnd);
}
}
十一、跨浏览器选择部分文本
function selectText(textbox,startIndex,stopindex){
if(textbox.setSelectionRange()){
textbox.setSelectionRange(startIndex,stopindex);
}else if(textbox.createTextRange()){
var range = textbox.createTextRange();
range.collapse(true);
range.moveStart("character",startIndex);
range.moveEnd("character",stopindex-startIndex);
range.select();
}
textbox.focus();
}