Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

一些常见的编码小技巧整理 #8

Open
fredshare opened this issue Nov 25, 2014 · 0 comments
Open

一些常见的编码小技巧整理 #8

fredshare opened this issue Nov 25, 2014 · 0 comments
Labels

Comments

@fredshare
Copy link
Owner

1、重复字符串的创建
// 创建32个0的商品ID

new Array(33).join('0');
// 即,创建N个重复字符串
new Array(N + 1).join(repeater);

2、判断是否闰年

var year = 2008;
new Date( +new Date( year, 2, 1 ) - 1 ).getDate() === 29

3、使用a标签内置的机制来解析url地址
这是一个使用a标签内置的机制来解析url地址的方法,大家或许平时都在用string和正则的方法来处理url解析,其实浏览器本身就具有解析url的能力,快来看看吧

var parser = document.createElement('a');
parser.href = "http://example.com:3000/pathname/?search=test#hash";

console.log(parser.protocol); // => "http:"
console.log(parser.hostname); // => "example.com"
console.log(parser.port);     // => "3000"
console.log(parser.pathname); // => "/pathname/"
console.log(parser.search);   // => "?search=test"
console.log(parser.hash);     // => "#hash"
console.log(parser.host);     // => "example.com:3000"

4、获取服务器端的时间
巧妙利用http请求的head方法来让服务器端返回时间,不用额外的去开发后端接口。 不过这种做法有一点风险: 1、服务器的时间要有同步,不然可能在路由到不同服务器的时候出现不同的时间结果 2、确认服务器的gzip配置是否正常,否则会导致下一个异步请求出错。

function $getServerTime(url) {
    var xhr = $xhrMaker(), url = url || "http://" + window.location.hostname+"/favicon.ico";
    try{
        xhr.open("HEAD", url, false);
        xhr.send();
    }catch(e){
        return new Date();
    }
    return new Date(xhr.getResponseHeader("Date"));
}

5、获取对象类型

function getType(obj) {
        return obj === null ? 'null' : (obj === undefined ? 'undefined' : Object.prototype.toString.call(obj).slice(8, -1).toLowerCase());
      }

6、短小精悍的微型模板引擎
一个简单的模板引擎。它设计精巧,支持普通变量填充与循环,代码量很小,同时支持传入模板字符串及从页面的隐藏textarea取模板内容。

function $SimpleTemplate() {
    return {
        /**
         *使用JSON数据填充模板
         *@param {object}   json    json对象
         *@param {string}   tpl     模板字符串
         *@example  
         *@return   替换结果字符串
         */
        parse : function(json,tpl,splitStr)
        {
            var blocks=[];  

            for(var i=0,len=json.length; i<len; i++){="" blocks.push(tpl.replace(="" {(\w+)}="" g,function(a,="" b){="" return="" json[i][b]="" !="=" undefined="" ?="" :="" a;="" }));="" }="" *$$.each(json,function(i,="" el){="" blocks.push($strtrim(tpl).replace(="" el[b]="" })*="" blocks.join(splitstr="" ||="" '');="" },="" **="" *="" *@param="" {object}="" json="" json对象="" {string}="" target="" 目标填充元素id="" tpl="" 模板textarea的id,也可以直接传入模板内容="" stuff="" function(json,target,tpl,splitstr)="" {="" '#'+target+'_tpl').val();="" var="" *传入的模板内容*="" $id(target+'_tpl').value="" *从隐藏的textarea取*="" ;="" m="tpl.match(/<#([\s\S]+)#">/);
            var allTpl = m ? m[0] : tpl;
            var blockTpl= m ? m[1] : tpl;
            var html = tpl.replace(allTpl, this.parse(json, blockTpl, splitStr));
            var dom = document.getElementById(target);
            if (dom) dom.innerHTML = html;
        }
    };
}
function $id(id){
    return typeof(id)=="string"?document.getElementById(id):id;
}
</len;>

未完待续

@fredshare fredshare added the blog label Nov 27, 2014
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant