大K自己封裝的AJAX

2 Comments Posted by jeffery on 2010-06-29, under javascript

全能的K神啊,請賜予我力量吧~

大K自己封裝的AJAX,僅以此帖作為收藏,以表達我對大k那有如濤濤江水,連綿不絕的景仰之情!

(function () {
            var kinogam;
            if (!window.kinogam)
                kinogam = window.kinogam = new Object();
            else
                kinogam = window.kinogam;

            kinogam.ajax = function (s) {
                var x = new kinogam.ajaxHandler();
                x.setMember(s);

                x.xmlHttp.onreadystatechange = function () {
                    if (x.xmlHttp.readyState == 4 && ((x.xmlHttp.status >= 200 && x.xmlHttp.status < 300) ||
                     x.xmlHttp.status == 304 || x.xmlHttp.status == 1223)) {
                        if (x.success != null)
                            x.success.call(x,x.xmlHttp.responseText);
                    }
                    else if (x.xmlHttp.readyState == 4) {
                        if (x.error != null)
                            x.error.call(x,x.xmlHttp.responseText);
                    }
                }
                x.xmlHttp.open(x.type, x.url, x.async);
                try {
                    x.xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
                    x.xmlHttp.send(kinogam.ajax.json2url(x.data));
                }
                catch (e) {
                }
            }

            kinogam.ajaxHandler = function () {
                this.url = "";
                this.type = "POST";
                this.data = null;
                this.async = true;
                this.success = null;
                this.error = null;
                this.xmlHttp = kinogam.ajax.getXmlHttpRequest();
            }
            kinogam.ajaxHandler.prototype.setMember = function (s) {
                if (s != null) {
                    for (var i in s) {
                        this[i] = s[i];
                    }
                }
            }
            kinogam.ajax.getXmlHttpRequest = function () {
                return window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest();

            }
            kinogam.ajax.json2url = function (json) {
                var url = "";
                for (var i in json) {
                    url += "&" + encodeURIComponent(i) + "=" + encodeURIComponent(json[i]);
                }
                return url.replace(/^&/, "");
            }
        })();

        kinogam.ajax({
            url: "handler.ashx",
            data: { b: "kkkyyy" },
            success: function (html) {
                alert(html);
            }

        });

多级菜单的簡單實現

Leave a Comment Posted by jeffery on 2010-06-03, under javascript

最近群裡老有人在問多級菜單的問題,中午閒著沒事,就寫了個。嗯,懶得打字,直接看DEMO算了…
感謝鈴妹幫我看bug…

提示:你可以先修改部分代码再运行。

基姆拉尔森计算公式

Leave a Comment Posted by jeffery on 2010-03-30, under javascript

嗯,先说明一下,这个函数用来计算给出的日期是星期几的,相似的还有蔡勒公式
//蔡勒(Zeller)公式:w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1

算法如下:
  基姆拉尔森计算公式

  W= (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400) mod 7
  
在公式中d表示日期中的日数,m表示月份数,y表示年数。
  注意:在公式中有个与其他公式不同的地方:
  把一月和二月看成是上一年的十三月和十四月,例:如果是2004-1-10则换算成:2003-13-10来代入公式计算。
  代码如下:

  // java code
  //y-年,m-月,d-日期
  string CaculateWeekDay(int y,int m, int d)
  {
  if(m==1||m==2) {
  m+=12;
  y--;
  }
  int week=(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7;
  string weekstr="";
  switch(week)
  {
  case 0: weekstr="星期一"; break;
  case 1: weekstr="星期二"; break;
  case 2: weekstr="星期三"; break;
  case 3: weekstr="星期四"; break;
  case 4: weekstr="星期五"; break;
  case 5: weekstr="星期六"; break;
  case 6: weekstr="星期日"; break;
  }
  return weekstr;
  }

以下这个是Kinogam改的js版,代码如下:

alert(caculateWeekDay(2010,3,30));
function caculateWeekDay(y,m,d)
{
if(m==1) m=13;
if(m==2) m=14;
var week=(d + Math.floor(2*m) + Math.floor(3*(m+1)/5) + y + Math.floor(y/4) - Math.floor(y/100) + Math.floor (y/400))%7;
var weekstr="";
switch(week)
{
case 0: weekstr="星期一"; break;
case 1: weekstr="星期二"; break;
case 2: weekstr="星期三"; break;
case 3: weekstr="星期四"; break;
case 4: weekstr="星期五"; break;
case 5: weekstr="星期六"; break;
case 6: weekstr="星期日"; break;
}

return weekstr;
}

在群里见大笨Kinogam在讨论,网上找到的,留下来做个记录。
另外,日志写完后,发现大笨的blog也更新了,可以参考一下他的解决办法根据日期获得当天是星期几?

一个简单的实现隔行换色的东西

Leave a Comment Posted by jeffery on 2010-03-26, under javascript

隔行换色,好常见的东西- -!
老早前写的,前段时间群里(24810664[jQuery Learning]<-这个真的是广告)的Erico.Len在问,就按他的需求改了改,然后,解决了他的问题,我正好也有东西更新一下blog,要不太久没更新,实在太对不起辛苦爬我页面的蜘蛛了...

嗯,总的来说,这个东西写得很烂,毕竟偶不是搞技术的嘛,哈...

提示:你可以先修改部分代码再运行。

js四舍五入(round()方法)并保留小数点后N位的函数

Leave a Comment Posted by jeffery on 2009-10-26, under javascript

今天容容问了我个四舍五入的问题,本来想自己写个,后来在google上搜了一下,发现个写法巨强的四舍五入的转换函数,如下:

function   round(v,e){
    var   t=1;
    for(;e>0;t*=10,e--);
    for(;e<0;t/=10,e++);
    return   Math.round(v*t)/t;
}

在感叹JS强大的同时,也感叹一下自己的无知!
参数里的:
v表示要转换的值
e表示要保留的位数

函数里的两个for,这个是重点了,
第一个for针对小数点右边的情况,也就是保留小数点右边多少位;第二个for针对小数点左边的情况,也就是保留小数点左边多少位。
for的作用,就是计算t的值,也就是v应该放大或者缩小多少倍的倍数(倍数=t)。
for这里利用到了for里的两个特性,条件判断和计数器累计(循环),当e满足条件时for继续,并且e每次累加(e的每次累加,就是给for制造不满足循环的条件)的同时,也计算t的值。
最后利用了原生的round方法来计算被放大/缩小后的v的结果,然后把结果放大/缩小到正确的倍数

push or concat is not a function?让我们来了解事实看清本质!

2 Comments Posted by jeffery on 2009-09-11, under javascript

今天在做IE6/7:focus伪类fix的时候,遇到个问题,就是通过document.getElementsByTagName(‘input’)和document.getElementsByTagName(‘textarea’)得到的数组不能使用concat()方法来联合!这是怎么回事?来看看官方一点的解释:

getElementsByTagName() 方法可返回带有指定标签名的对象的集合。

看到了吧,是对象的集合!这里面有个很微妙的联系,数组(Array())是一种特殊的对象(Object()),而且我们平时都把这种方法得到的集合当成数组用惯了,思维一时转不过来,实际上,我们常用到的是length属性,这一点比较容易误导人。关于length,不只是数组有,字符串也有,不要想当然有length就是数组了。

额,难道你还不相信document.getElementsByTagName得到的不是数组?好吧,来看一下例子

提示:你可以先修改部分代码再运行。

第一个弹出的结果
IE6 : undefined
FF3 : function Object() {
    [native code]
}

第二个弹出的结果
IE6 : function Object() {
    [native code]
}
FF3 : 与IE6一致

第三个弹出的结果
IE6 : function Array() {
    [native code]
}
FF3 : 与IE6结果一致

 

这次看明白了吧,所以得到的结果集不是数组,而是一个所谓的对象集合。

所以我要使用其他办法来使两个结果集联合起来,下面是我的解决办法

提示:你可以先修改部分代码再运行。

使用sort()为二维数组排序

Leave a Comment Posted by jeffery on 2009-09-04, under javascript

一直以为js里数组的原生方法sort()只能对简单的数组进行排序,我承认,是我小看它了(其实是我没学好)。昨天遇到个需要按第二维数据里的length个数来排序的问题,想了一天,实在没找到什么比较牢靠的方法来解决这个问题。后来灵机一动,想到sort()里还提供一个参数,能不能靠这个参数来解决问题呢,哈哈,事实上,我成功了!

sort()方法提供了一个用来作为排序依据的参数,一般情况下,如果不指定这个参数,会按ascii的顺序来对数组里的元素进行排序,网上给的例子大多数也是这样子的,这在一定程度上会误导部分人。具体,请看下面的例子。

提示:你可以先修改部分代码再运行。

例中的swap(a,b),就是用来让sort()排序的依据,需要按什么条件来排序,就全靠它了。swap的参数a,b,实际上就是sort()里进行排序的对象,也就是第一维数组里的元素,而最后的排序结果,就靠a,b的计算结果来决定。在我的需求里,是需要按第二维数组的length来排序的,所以我的a,b式子写成,a.length – b.length。

至于是升序(asc)还是降序(desc),就看你的式子怎么写了:a-b是默认的升序;b-a是降序。

关于sort()的具体说明,请到http://www.w3school.com.cn查看

tags: ,  

模仿Kontain.com的搜索框做了一个

Leave a Comment Posted by jeffery on 2009-04-27, under javascript

模仿Kontain.com的搜索框做了一个,主要考虑到裸奔的时候还可以用,其他方面没太多考虑,IE6、IE7、FF3下没问题,有空修正一下opera下的问题吧。
原文发在蓝色,貌似我是帖子终结者,发的帖都没几个人关注,-_-|||

提示:你可以先修改部分代码再运行。

tipsAlert-一个简单的提示效果

2 Comments Posted by jeffery on 2009-04-26, under javascript

在上家公司任职的时候做的东西,因为后台有很多ajax的交互,所以需要经常给出提示,就做了这么个组件。另外,顺便测试一下代码高亮^_^
(continue reading…)