javascript 常用函数(二)

/***javascript 常用函数**/function each( object, callback ) {
        if ( undefined === object.length ){
            for ( var name in object ) {
                if (false === callback( object[name], name, object )) break;
            }
        } else {
            for ( var i = 0, len = object.length; i < len; i++ ) {
                if (i in object) { if (false === callback( object[i], i, object )) break; }
            }
        }
    }

//过滤空白文本节点
function filterSpaceNode(nodes) {掉
    var ret=[];
    for(var i=0;i<nodes.length;i++) {
        if (nodes[i].nodeType===3
                && /^\s+$/.test(nodes[i].nodeValue)) {
                    continue;
        }
        ret.push(nodes[i]);
    }
    return ret;
}

function addClassName(obj,cn) {
    return obj.className += " " + cn;
}

function delClassName(obj,cn) {
    return obj.className = obj.className.replace(new RegExp("\\b"+cn+"\\b"),"");
    //同样,多个className之间的多个空格也会被视为一个
}

function hasClassName(obj,cn) {

        return (new RegExp("\\b"+cn+"\\b")).test(obj.className);
} 

function placeNode(node,fn,__this) {
    fn.call(__this,frag(node));
    return __this;
}

function append(node, newNode) {
    return placeNode(newNode,function (one) {node.appendChild(one)},node);
}

function preappend(node, newNode) {
    return placeNode(newNode,function (one) {node.insertBefore(one,node.firstChild)},node);
}

function before(node, newNode) {
    return placeNode(newNode,function (one) {node.parentNode.insertBefore(one,node)},node);
}

function after(node, newNode) {
    //如果node有下一个节点的话,newNode 插入到node.nextSibling的前面
    //如果node没有下一个节点,newNode插入为node.parentNode的最后一个子
    if (node.nextSibling) {
        placeNode(newNode,function (one) {node.parentNode.insertBefore(one,node.nextSibling)},node);
    } else {
        placeNode(newNode,function (one) {node.parentNode.appendChild(one)},node);
    }
    return node;
}

//如果新节点是页面中已经存在的则新节点原来的位置会消失
function replaceNode(newNode, node) {
   node.parentNode.replaceChild(newNode, node);
}

function delNode(node) {
    node.parentNode.removeChild(this);
}

function frag(nodes) {
    var tempFrag =document.createDocumentFragment();
    if (nodes.nodeType) {nodes=[nodes];}

    /*    错误的写法 传入的是引用
    each(nodes,function(node){
        tempFrag.appendChild(node);
    })*/

    for(var i=0;i<nodes.length;i++) {
        //克隆后不在是引用
        var a = nodes[i].cloneNode(true);
        (function(node){
            tempFrag.appendChild(node);
        })(a)
    }

    /*
        while(nodes.length>0)
        {
            tempFrag.appendChild(nodes[0]);
            alert(nodes.length);
        }
    */

    return tempFrag;
}

//html转换为对象
function html2Obj(html)
{
    var div = document.createElement(‘div‘);
    div.innerHTML = html;
    return div.firstChild;
}

//数据的本地化存储,都兼容
function makeWebStorage() {
    //ie用userdata实现,w3c浏览器本身支持
    if (!("localStorage" in window)) {
        var store = {
            userData : null,
            name : location.hostname,

            init : function () {
                if (!store.userData) {
                    try {
                        store.userData = document.createElement(‘INPUT‘);
                        store.userData.type = "hidden";
                        store.userData.style.display = "none";
                        store.userData.addBehavior("#default#userData");
                        document.body.appendChild(store.userData);
                        var expires = new Date();
                        expires.setDate(expires.getDate() + 365);
                        store.userData.expires = expires.toUTCString();
                    } catch (e) {
                        return false;
                    }
                }
                return true;
            },

            setItem : function (key, value) {

                if (store.init()) {
                    store.userData.load(store.name);
                    store.userData.setAttribute(key, value);
                    store.userData.save(store.name);
                }
            },

            getItem : function (key) {
                if (store.init()) {
                    store.userData.load(store.name);
                    return store.userData.getAttribute(key)
                }
            },

            remove : function (key) {
                if (store.init()) {
                    store.userData.load(store.name);
                    store.userData.removeAttribute(key);
                    store.userData.save(store.name);
                }

            }
        };
    }else{
        store = {
            set:function(key, value){localStorage.setItem(key, value)},
            get:function(key){return localStorage.getItem(key)},
            remove:function(key){return localStorage.removeItem(key)}
        }
    }

    window.webStorage = store;
}

/**
 * 记录函数调用的次数
 */
function invokeTimes(){

    if(arguments.callee.times == undefined)
    {
        arguments.callee.times = 0;
    }
    arguments.callee.times ++;

    console.log(arguments.callee.times);

}
document.body.onclick = function(){

    invokeTimes();
}

//变量定义 效果同php中的define函数
function define (name, value) {
  // Define a new constant
  //
  // version: 903.3016
  // discuss at: http://phpjs.org/functions/define
  // +      original by: Paulo Freitas
  // +       revised by: Andrea Giammarchi (http://webreflection.blogspot.com)
  // + reimplemented by: Brett Zamir (http://brett-zamir.me)
  // *        example 1: define(‘IMAGINARY_CONSTANT1‘, ‘imaginary_value1‘);
  // *        results 1: IMAGINARY_CONSTANT1 === ‘imaginary_value1‘
  var defn, replace, script, that = this,
    d = this.window.document;
  var toString = function (name, value) {
    return ‘const ‘ + name + ‘=‘ + (/^(null|true|false|(\+|\-)?\d+(\.\d+)?)$/.test(value = String(value)) ? value : ‘"‘ + replace(value) + ‘"‘);
  };
  try {
    eval(‘const e=1‘);
    replace = function (value) {
      var replace = {
        "\x08": "b",
        "\x0A": "\\n",
        "\x0B": "v",
        "\x0C": "f",
        "\x0D": "\\r",
        ‘"‘: ‘"‘,
        "\\": "\\"
      };
      return value.replace(/\x08|[\x0A-\x0D]|"|\\/g, function (value) {
        return "\\" + replace[value];
      });
    };
    defn = function (name, value) {
      if (d.createElementNS) {
        script = d.createElementNS(‘http://www.w3.org/1999/xhtml‘, ‘script‘);
      } else {
        script = d.createElement(‘script‘);
      }
      script.type = ‘text/javascript‘;
      script.appendChild(d.createTextNode(toString(name, value)));
      d.documentElement.appendChild(script);
      d.documentElement.removeChild(script);
    };
  } catch (e) {
    replace = function (value) {
      var replace = {
        "\x0A": "\\n",
        "\x0D": "\\r"
      };
      return value.replace(/"/g, ‘""‘).replace(/\n|\r/g, function (value) {
        return replace[value];
      });
    };
    defn = (this.execScript ?
    function (name, value) {
      that.execScript(toString(name, value), ‘VBScript‘);
    } : function (name, value) {
      eval(toString(name, value).substring(6));
    });
  }
  defn(name, value);
}

/**
 * 根据类名获取元素
 *
 * @param className
 * @param context
 * @returns
 */
function getByClassName(className,context) {
    context=context || document;
    if (context.getElementsByClassName) {
        return context.getElementsByClassName(className);
    }
    var nodes=context.getElementsByTagName(‘*‘),ret=[];
    for (var i=0;i<nodes.length;i++) {
        if (nodes[i].nodeType == 1 && nodes[i].className.indexOf(className) != -1)
        {
            ret.push(nodes[i]);
        }
    }
    return ret;
}

/**
 * Registers a callback for DOM ready. If DOM is already ready, the
 * callback is called immediately.
 * @param {Function} Array callback
 */
function domReady(callback) {
    var isTop, testDiv, scrollIntervalId,
        isPageLoaded = false,
        doc = document,
        readyCalls = [];

    function runCallbacks(callbacks) {
        var i;
        for (i = 0; i < callbacks.length; i += 1) {
            callbacks[i](doc);
        }
    }

    function callReady() {
        var callbacks = readyCalls;

        if (isPageLoaded) {
            //Call the DOM ready callbacks
            if (callbacks.length) {
                readyCalls = [];
                runCallbacks(callbacks);
            }
        }
    }

    /**
     * Sets the page as loaded.
     */
    function pageLoaded() {
        if (!isPageLoaded) {
            isPageLoaded = true;
            if (scrollIntervalId) {
                clearInterval(scrollIntervalId);
            }

            callReady();
        }
    }

    if (document.addEventListener) {
        //Standards. Hooray! Assumption here that if standards based,
        //it knows about DOMContentLoaded.
        document.addEventListener("DOMContentLoaded", pageLoaded, false);
        window.addEventListener("load", pageLoaded, false);
    } else if (window.attachEvent) {
        window.attachEvent("onload", pageLoaded);

        testDiv = document.createElement(‘div‘);
        try {
            isTop = window.frameElement === null;
        } catch (e) {}

        //DOMContentLoaded approximation that uses a doScroll, as found by
        //Diego Perini: http://javascript.nwbox.com/IEContentLoaded/,
        //but modified by other contributors, including jdalton
        if (testDiv.doScroll && isTop && window.external) {
            scrollIntervalId = setInterval(function () {
                try {
                    testDiv.doScroll();
                    pageLoaded();
                } catch (e) {}
            }, 1);
        }
    }

    //Check if document already complete, and if so, just trigger page load
    //listeners. Latest webkit browsers also use "interactive", and
    //will fire the onDOMContentLoaded before "interactive" but not after
    //entering "interactive" or "complete". More details:
    //http://dev.w3.org/html5/spec/the-end.html#the-end
    //http://stackoverflow.com/questions/3665561/document-readystate-of-interactive-vs-ondomcontentloaded
    //Hmm, this is more complicated on further use, see "firing too early"
    //bug: https://github.com/requirejs/domReady/issues/1
    //so removing the || document.readyState === "interactive" test.
    //There is still a window.onload binding that should get fired if
    //DOMContentLoaded is missed.
    if (document.readyState === "complete") {
        pageLoaded();
    }

    if (isPageLoaded) {//dom已经ready
        callback(doc);
    } else {
        readyCalls.push(callback);
    }
}

domReady(function(){
    alert(‘domload‘);
    alert(document.getElementById(‘container‘));
})

//改变某个函数的内部this指针
function closure(fn, scope)
{
    return function (){
        fn.apply(scope, arguments);
    };
}

//调用某个对象的某个函数,并将次对象作为方法的作用域
function invoke(obj, methodName)
{
    return function(){
        obj.methodName.apply(obj, arguments);
    };
}

// 元素数据缓存
(function(){

    var cache = [0],expando = ‘data‘ + +new Date();
    function data(elem) {
        var cacheIndex = elem[expando],
            nextCacheIndex = cache.length;
        if(!cacheIndex) {
            cacheIndex = elem[expando] = nextCacheIndex;
            cache[cacheIndex] = {};
        }

        return {
            get : function(key) {
                if(typeof key === ‘string‘)
                {
                     return cache[cacheIndex] ? cache[cacheIndex][key] : null;
                }
                return cache[cacheIndex] ? cache[cacheIndex] : null;
            },
            set : function(key, val) {
                cache[cacheIndex][key] = val;
                return data(elem);
            },
            remove : function(key){
                if(cache[cacheIndex])
                {
                    return cache.splice(cacheIndex,1);
                }
            }
        }
    }

    window.data = data;

})();

//js请求xml文件,
if (window.ActiveXObject) {
    //IE
    var getXMLDOM=function () {
        return new ActiveXObject("Microsoft.XmlDom");
    },loadXMLFile=function (xmlDom,url,callback) {
        xmlDom.onreadystatechange=function () {
            if (xmlDom.readyState===4) {
                if (xmlDom.parseError.errorCode===0) {
                    callback.call(xmlDom);
                } else {
                    throw new Error("XML Parse Error:"+xmlDom.parseError.reason);
                }
            }
        };
        xmlDom.load(url);
        return xmlDom;
    },loadXMLString=function (xmlDom,s) {
        xmlDom.loadXML(s);
        if (xmlDom.parseError.errorCode!==0) {
            throw new Error("XML Parse Error:"+xmlDom.parseError.reason);
        }
        return xmlDom;
    },
    getXML=function (xmlNode) {
        return xmlNode.xml;
    };
}else if (document.implementation && document.implementation.createDocument) {
    //W3C
    var getXMLDOM=function () {//获取一个XMLDOM对象
        return document.implementation.createDocument("","",null);
    },
    loadXMLFile=function (xmlDom,url,callback) {
        if (xmlDom.async===true) {
            xmlDom.onload=function () {
                if (xmlDom.documentElement.nodeName=="parsererror") {
                    throw new Error("XML Parse Error:"+xmlDom.documentElement.firstChild.nodeValue);
                } else {
                    callback.call(xmlDom);
                }
            };
        }
        console.dir(xmlDom);
        xmlDom.load(url);
        return xmlDom;
    },
    loadXMLString=function (xmlDom,s) {
        var p = new DOMParser();
        var newDom=p.parseFromString(s,"text/xml");
        if (newDom.documentElement.nodeName=="parsererror") {
            throw new Error("XML Parse Error:"+newDom.documentElement.firstChild.nodeValue);
        }
        while (xmlDom.firstChild) {
            xmlDom.removeChild(xmlDom.firstChild);
        }
        for (var i=0,n;i<newDom.childNodes.length;i++) {
            n=xmlDom.importNode(newDom.childNodes[i],true);
            //importNode用于把其它文档中的节点导入到当前文档中
            //true参数同时导入子节点
            xmlDom.appendChild(n);
        }
        return xmlDom;
    },
    getXML=function (xmlNode) {
        var s= new XMLSerializer();
        return s.serializeToString(xmlNode,"text/xml");
    };
}

var xmldom = getXMLDOM();
loadXMLFile(xmldom,"/xml.php",function () {
   alert(this);
});

/**
args {
    url
    method 默认值为get
    success Function
    data {key:value}
    cache Boolean true表示缓存,默认值为false
    datatype 默认 text text|xml
}
*/
function ajax(args) {
    //创建xhr对象
    function createXHR() {
    return window.XMLHttpRequest?
        new XMLHttpRequest():
        new ActiveXObject("Microsoft.XMLHTTP");//IE6
    }

    //拼接参数
    function params(o) {
        var a=[];
        for (var i in o) {
           a.push(encodeURIComponent(i)+"="+encodeURIComponent(o[i]));
        }
        return a.join("&");
    }

    var xhr = createXHR();

    args.method=args.method || "get";

    if (!args.cache) {
        args.data.cache = (new Date()*1);
    }

    var data_str = params(args.data)

    if (/get/i.test(args.method) && data_str) {
         args.url += args.url.indexOf("?")<0 ? ‘?‘ : ‘&‘;
         args.url += data_str;
    }

    xhr.open(args.method,args.url,true);

    xhr.onreadystatechange=function () {
        if (xhr.readyState===4 && xhr.status===200) {
            if(!args.datatype || args.datatype.toLowerCase() === ‘text‘)
            {
                args.success(xhr.responseText);
            }else{
                args.success(xhr.responseXML);
            }
        }
    };

    if (/post/i.test(args.method)) {
        xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
        xhr.send(data);
    } else {
        xhr.send();
    }
}

ajax({
    url:"/xml.php",
    method:‘post‘,
    success:function(xmldom){
        alert(xmldom.nodeName);
    },
    data:{id:1},
    datatype:‘xml‘
}) 

//计算数组中的最大值
Array.prototype.max = function(){
 return Math.max.apply({},this)
}

//计算数组中的最小值
Array.prototype.min = function(){
 return Math.min.apply({},this)
}

//复制数组
Array.prototype.copy =
  function() {
    return [].concat(this);
};

//去除数组中只指定元素,只能去除一个,如果想多个,之前先用unique处理
Array.prototype.remove = function(value){
    for(var i=0,len=this.length;i<len;i++)
    {
        if(this[i]==value){
            this.splice(i, 1);
            break;
        }
    }

    return this;
}

//去除数组中只指定元素,只能去除一个,如果想多个,之前先用unique处理
Array.prototype.inArray = function(value){
    var index = -1;
    each(this,function(v,k){
        if(v == value){
            index = k;
            return false;
        }
    })

    return index;
}

//去除数组中的重复元素
Array.prototype.unique = function(){
    var rst = [];
    each(this, function(v,k){
        if(rst.inArray(v)<0) rst.push(v);
    })
    return rst;
}

String.prototype.repeat=function(n){return new Array(n+1).join(this);}

String.prototype.ltrim=function(){return this.replace(/^\s*/, "");}

String.prototype.rtrim=function(){return this.replace(/\s*$/, "");}

String.prototype.trim=function(){return this.rtrim().ltrim();}

//非ascii字符
String.prototype.hasChinese=function(){return /[^\u00-\uff]/g.test(this);}

//包括中英韩文,这三种语言里面有更多共同的
String.prototype.onlyChinese=function(){return /^[\u0391-\u9FBF]+$/g.test(this);}

//取得字符串实际长度(汉字算两个字节,英文字母算一个字节) \x代表ascii码,会按unicode码进行匹配
String.prototype.bytes=function(){ return this.replace(/[^\x00-\xff]/gi,‘xx‘).length;}

Number.prototype.inter=function (a,b) {//检测数字是否在区间之内
    var min=Math.min(a,b),max=Math.max(a,b);
    return this==a || this==b || (Math.max(this,min)==this && Math.min(this,max)==this);
};

  
时间: 2024-10-09 22:52:47

javascript 常用函数(二)的相关文章

使用prototype扩展的JavaScript常用函数库

Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--> 1 /** * 检索数组元素(原型扩展或重载) * @param {o} 被检索的元素值 * @type int * @returns 元素索引 */ Array.prototype.contains = function(o) { var index = -1; for(var i=0;i<thi

【javascript】javascript常用函数大全

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

Javascript 常用函数【3】

jquery选中radio //如果之前有选中的,则把选中radio取消掉 $("#tj_cat .pro_category").each(function() { if ($(this).attr('checked')){ $(this).attr('checked' ,false); } }); //获取被选中的标签的值 radio:(checkbox和这个一样) var val=$('input:radio[name="sex"]:checked').val(

JavaScript 常用函数总结

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

javascript常用函数整理

javascript函数: 1.禁止鼠标右键菜单代码块 function stop() {     return false; } document.oncontextmenu = stop; //禁用鼠标右键 document.ondragstart = stop; //禁止拖动 document.onselectstart = stop; //禁止选择 2.判断打开的页面是否存在父页面 if (window.top == window.self && window.parent == 

Javascript 常用函数【2】

1.常规函数javascript常规函数包括以下9个函数:(1)alert函数:显示一个警告对话框,包括一个OK按钮.(2)confirm函数:显示一个确认对话框,包括OK.Cancel按钮.(3)escape函数:将字符转换成Unicode码.(4)eval函数:计算表达式的结果.(5)isNaN函数:测试是(true)否(false)不是一个数字.(6)parseFloat函数:将字符串转换成浮点数字形式.(7)parseInt函数:将符串转换成整数数字形式(可指定几进制).(8)promp

WebView 中重写javascript 常用函数

常规函数   javascript 常规函数包括以下3个函数:  (1)alert函数:显示一个警告对话框,包括一个OK按钮. 对应:http://www.dreamdu.com/javascript/window.confirm/(2)confirm函数:显示一个确认对话框,包括OK.Cancel按钮. 对应:http://www.dreamdu.com/javascript/window.alert/(3)prompt函数:显示一个输入对话框,提示等待用户输入. 对应:http://www.

javascript常用函数实现的收集

收集了一些比较常用的javascript函数. 1.字符串长度截取 function cutstr(str, len) { var temp, icount = 0, patrn = /[^\x00-\xff]/, strre = ""; for (var i = 0; i < str.length; i++) { if (icount < len - 1) { temp = str.substr(i, 1); if (patrn.exec(temp) == null) {

javascript 常用函数

部分也是自己常用的,但是部分还需要实际验证/** 获取元素到页面顶端的距离(出自jquery源码) */ function getCoords(el) { if (typeof el == 'string') { el = Fid(el); } var box = el.getBoundingClientRect(), doc = el.ownerDocument, body = doc.body, html = doc.documentElement, clientTop = html.cli