大K自己封裝的AJAX
全能的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);
}
});
基姆拉尔森计算公式
嗯,先说明一下,这个函数用来计算给出的日期是星期几的,相似的还有蔡勒公式
//蔡勒(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也更新了,可以参考一下他的解决办法根据日期获得当天是星期几?
一个简单的实现隔行换色的东西
隔行换色,好常见的东西- -!
老早前写的,前段时间群里(24810664[jQuery Learning]<-这个真的是广告)的Erico.Len在问,就按他的需求改了改,然后,解决了他的问题,我正好也有东西更新一下blog,要不太久没更新,实在太对不起辛苦爬我页面的蜘蛛了...
嗯,总的来说,这个东西写得很烂,毕竟偶不是搞技术的嘛,哈...
提示:你可以先修改部分代码再运行。
js四舍五入(round()方法)并保留小数点后N位的函数
今天容容问了我个四舍五入的问题,本来想自己写个,后来在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?让我们来了解事实看清本质!
今天在做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()为二维数组排序
一直以为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查看
模仿Kontain.com的搜索框做了一个
模仿Kontain.com的搜索框做了一个,主要考虑到裸奔的时候还可以用,其他方面没太多考虑,IE6、IE7、FF3下没问题,有空修正一下opera下的问题吧。
原文发在蓝色,貌似我是帖子终结者,发的帖都没几个人关注,-_-|||
提示:你可以先修改部分代码再运行。
tipsAlert-一个简单的提示效果
在上家公司任职的时候做的东西,因为后台有很多ajax的交互,所以需要经常给出提示,就做了这么个组件。另外,顺便测试一下代码高亮^_^
(continue reading…)