杰拉斯的博客

标签:JavaScript

JavaScript日期格式化函数

杰拉斯 杰拉斯 | 时间:2013-01-24, Thu | 6,019 views
前端开发 
Date.prototype.format = function(mask) {
    var d = this;
    var zeroize = function (value, length) {
        if (!length) length = 2;
        value = String(value);
        for (var i = 0, zeros = ''; i < (length - value.length); i++) {
            zeros += '0';
        }
        return zeros + value;
    };
    return mask.replace(/"[^"]*"|'[^']*'|\b(?:d{1,4}|m{1,4}|yy(?:yy)?|([hHMstT])\1?|[lLZ])\b/g, function($0) {
        switch($0) {
            case 'd':   return d.getDate();
            case 'dd':  return zeroize(d.getDate());
            case 'ddd': return ['Sun','Mon','Tue','Wed','Thr','Fri','Sat'][d.getDay()];
            case 'dddd':    return ['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'][d.getDay()];
            case 'M':   return d.getMonth() + 1;
            case 'MM':  return zeroize(d.getMonth() + 1);
            case 'MMM': return ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'][d.getMonth()];
            case 'MMMM':    return ['January','February','March','April','May','June','July','August','September','October','November','December'][d.getMonth()];
            case 'yy':  return String(d.getFullYear()).substr(2);
            case 'yyyy':    return d.getFullYear();
            case 'h':   return d.getHours() % 12 || 12;
            case 'hh':  return zeroize(d.getHours() % 12 || 12);
            case 'H':   return d.getHours();
            case 'HH':  return zeroize(d.getHours());
            case 'm':   return d.getMinutes();
            case 'mm':  return zeroize(d.getMinutes());
            case 's':   return d.getSeconds();
            case 'ss':  return zeroize(d.getSeconds());
            case 'l':   return zeroize(d.getMilliseconds(), 3);
            case 'L':   var m = d.getMilliseconds();
                        if (m > 99) m = Math.round(m / 10);
                        return zeroize(m);
            case 'tt':  return d.getHours() < 12 ? 'am' : 'pm';
            case 'TT':  return d.getHours() < 12 ? 'AM' : 'PM';
            case 'Z':   return d.toUTCString().match(/[A-Z]+$/);
            default:    return $0.substr(1, $0.length - 2);
        }
    });
};

[转载]你真的已经搞懂JavaScript了吗?

杰拉斯 杰拉斯 | 时间:2012-12-02, Sun | 18,308 views
前端开发 

昨天在著名前端架构师Baranovskiy的博客中看到一个帖子《So, you think you know JavaScript?》

题目一:

if (!("a" in window)) {
    var a = 1;
}
alert(a);

题目二:

var a = 1,
    b = function a(x) {
        x && a(--x);
    };
alert(a);

题目三:

function a(x) {
    return x * 2;
}
var a;
alert(a);

题目四:

function b(x, y, a) {
    arguments[2] = 10;
    alert(a);
}
b(1, 2, 3);

题目五:

function a() {
    alert(this);
}
a.call(null);

请不要借助任何帮助工具,心算答案。答案在下面。

(阅读全文…)

新浪微博表情jQuery插件 v1.3——方便地实现表情插入功能

杰拉斯 杰拉斯 | 时间:2012-08-22, Wed | 77,836 views
前端开发 

重要说明:已更新,请通过 GitHub 获取最新版本。

开发缘由

自从新浪微博开放平台推出以来,各种微博应用层出不穷,作为新浪微博的忠实用户之一,我也曾开发过几个微博应用,对于微博发布应用来说,有一个功能是必不可少的,那就是表情。表情功能的实现虽说不难,但却比较繁琐,首先要了解新浪微博开放平台的表情API,然后通过某种方式调用,如果通过网页后台代码直接读取储存到JavaScript变量中,又会拖慢网页加载速度,如果采用AJAX读取,又要解决跨域问题,即便成功读取到表情数据了,又必须考虑表情分类,翻页等等等等问题,还需要考虑表情的插入方式并非简单的在文本最后插入,而是在光标所在处插入,还应该能够替换掉已选中文字,还要涉及到不同浏览器的兼容问题……

好吧,上面这段文字你可以跳过不看,你只需要知道表情功能的实现非常繁琐就行了(+_+),为了方便以后微博应用的开发,同样方便其他应用开发者,此款表情插件就此诞生。

插件简介

其实插件简介不必多说,用过新浪微博的应该都懂。自认为制作得还是比较像的:
新浪微博表情插件

(阅读全文…)

jQuery中利用JSONP解决AJAX跨域问题

杰拉斯 杰拉斯 | 时间:2012-08-10, Fri | 181,484 views
前端开发 

写在前面

跨域的解决方案有多种,其中最常见的是使用同一服务器下的代理来获取远端数据,再通过ajax进行读取,而在这期间经过了两次请求过程,使得获取数据的效率大大降低,这篇文章蓝飞就为大家介绍一下解决跨域问题的一种比较通用的方案——JSONP。

什么是跨域?

简单的来说,出于安全方面的考虑,页面中的JavaScript无法访问其他服务器上的数据,即“同源策略”。而跨域就是通过某些手段来绕过同源策略限制,实现不同服务器之间通信的效果。

(阅读全文…)

JavaScript中实现函数重载和参数默认值

杰拉斯 杰拉斯 | 时间:2012-08-08, Wed | 19,228 views
前端开发 

参数默认值是指在调用函数时,若省略了某个实参,函数会自动为该参数分配一个默认值,使得函数调用的方便性和灵活性大大提高。

举个例子,比如PHP中的字符串截取函数substr(string,start,length),当不指定length时,函数将默认截取字符串中start位置到字符串结束,而如果指定了length,则截取从start位置开始的以length为长度的字符串。

再比如jQuery框架中,$(selector).html()方法是获取该元素内的HTML代码,而$(selector).html(content)则是设置该元素内的HTML。

(阅读全文…)