先端開発常用関数と小技(持続更新)


日常のプロジェクトで使うものとネットで収集するものです.
不定幅の高さの要素を中央に表示します.
positionabsoluteleft:50%;
top:50%;
-webkit-transformtranslate(-50%,-50%);
transformtranslate(-50%,-50%);
DOM取得方法
//   id,class,tagname    
var get = {
    byId: function (id) {
        return document.getElementById(id)
    },
    byClass: function (sClass, oParent) {
        var aClass = [];
        var reClass = new RegExp("(^| )" + sClass + "( |$)");
        var aElem = this.byTagName("*", oParent);
        for (var i = 0; i < aElem.length; i++) {
        //     &&   ,    ture ,       
            reClass.test(aElem[i].className) && aClass.push(aElem[i]);
        }
        return aClass
    },
    byTagName: function (elem, obj) {
        return (obj || document).getElementsByTagName(elem)
    }
};

//    
function getByClass(oParent, sClass) //oParent    DOMsClass        {
    var aEle = oParent.getElementsByTagName('*');
    var aResult = [];
    var re = new RegExp('\\b' + sClass + '\\b', 'i');
    var i = 0;
    for (i = 0; i < aEle.length; i++) {
        if (re.test(aEle[i].className)) {
            aResult.push(aEle[i]);
        }
    }
    return aResult;
    //          DOM  
}
window onloadは何度も傍受することを実現します.
function addloadEvent(func){
    var oldonload=window.onload;
    if(typeof window.onload !='function'){
        window.onload=func;
    }
    else{
        window.onload=function(){
            oldonload();
            func();
        }
    }
}
insertAfter
function insertAfter(newElement,targetElement){
    var parent=targetElement.parentNode;
    if(parent.lastChild === targetElement){
        parent.appendChild(newElement);
    }else{
        parent.insertBefore(newElement,targetElement.nextSibling);
    }
}
文字列の繰り返し
//  array join  ,          , str     ,        
function repeatstr(str,n){
    return new Array(n+1).join(str);
}
console.log(repeatstr('hi',3));
urlを取得しますか?後ろのパラメータ値
 //   :    
    function getQueryString(name) {
        var reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)', 'i');
        var r = window.location.search.substr(1).match(reg);
        if (r != null) {
            return unescape(r[2]);
        }
        return null;
    }
    //     :
    alert(GetQueryString("   1"));
    alert(GetQueryString("   2"));
    alert(GetQueryString("   3"));

//   :split   
    function GetRequest() {
        var url = location.search; //  url "?"     
        var theRequest = new Object();
        if (url.indexOf("?") != -1) {
            var str = url.substr(1);
            strs = str.split("&");
            for(var i = 0; i < strs.length; i ++) {
                theRequest[strs[i].split("=")[0]] = unescape(strs[i].split("=")[1]);
            }
        }
        return theRequest;
    }
    var Request = new Object();
    Request = GetRequest();
    // var   1,  2,  3,  N;
    //   1 = Request['  1'];
    //   2 = Request['  2'];
    //   3 = Request['  3'];
    //   N = Request['  N'];
jsは、add(1)(2)(3)の呼び出しと同様の方法を実現する.
function add(x) {
    var sum = x;
    var tmp = function (y) {
        sum = sum + y;
        return tmp;
    };
    tmp.toString = function () {
        return sum;
    };
    return tmp;
}
console.log(add(1)(2)(3));  //6
console.log(add(1)(2)(3)(4));   //10
/*              ,       , tmp    x  ,     add(),    tmp,  x   tmp     ,    tmp          tmp  ,          tmp,   tmp       ,               tmp,  tmp               x     sum,        */

/*             tmp    ,             ,                     ,     JavaScript ,       ,     toString valueOf  ,      tmp toString valueOf  ,  sum  */
測定対象{}は空の対象ですか?
/* *           (         )。 //                    *              ,           。 */
function isOwnEmpty(obj) { 
    for(var name in obj) 
    { 
        if(obj.hasOwnProperty(name)) 
        { 
            return false; 
        } 
    } 
    return true; 
}; 

/* *           (         )。 *             ,           (     hasOwnProperty)。 */
function isEmpty(obj) { 
    for (var name in obj)  
    { 
        return false; 
    } 
    return true; 
};