80后 闹洞房41招

[不指定 2011年1月11日 16:55 | by gaoolp ]

1.五子登科——考验新人互相配合的默契,找根红绳子,新人用嘴各叼一头,中间系上一支点燃的香烟,在桌上放5跟竖直的火柴(可插在水果上)然后新人不能用手帮忙,两人合作把5根火柴全部点燃。提示:一定要紧绷绳子眼睛瞄准。

2.爱心杯——2个一样的杯子,倒满酒在其中一个杯子口部盖上保鲜膜,然后将2个杯子口对口的扣上缓缓抽出薄膜,要求新人不能动手一起喝完扣在一起的两杯酒,不能洒出。提示:只要新人中其中一人将杯子稍稍推开,另一人只管使劲喝就可以了。

3.香唇探宝——新郎平躺在4把椅子上,弟兄们在旁边围着看,新郎身上放上8-10个小物件,可以是小糖果,牛肉干之类,新娘蒙上眼睛转个圈然后不用手要用香唇把新郎身上的小物件收集齐全然后拆去眼布一个一个喂给新郎吃。提示:新郎可以对新娘说,指挥她左边点或者右边点。

4.探囊取物——两个生鸡蛋分别由新郎两个裤管放入,往上移动并使两颗鸡蛋于重要部位交会再分别由另一裤管移出。

5.甜蜜的交流——准备各6颗颜色一样的奶糖混在一起共12颗平分给新郎新娘含在嘴里,然后要求不能用手帮忙让新娘和新郎分别在嘴里最终呈现同样颜色的奶糖(比如新郎嘴里全是红色奶糖,而新娘嘴里全是乳白色的奶糖)提示:此游戏重在新娘新郎互相配合,可以张开嘴巴让对方观察,然后互相配合把对方需要的糖果过去。

6.农夫山泉有点甜——准备一矿泉水,新郎立于凳子上用腿夹紧矿泉水瓶(夹的部位要监督好)然后新娘咬开盖子喝一口对着话筒说:“XXX的农夫山泉有点甜

7.冲击波——在新郎新娘身上的关键部位贴上充了气的小气球,然后绑住两人的手和脚,双方只能用身体的相互挤压和碰撞,弄破气球,直到双方身上所有气球都破了为止。

8.见缝插针——在新娘的臀部绑上一块海绵,在其正中间割开一条缝。在新郎的腰间垂直绑一香蕉。游戏开始,新郎必须把香蕉**海绵的缝隙里。每插一下,新娘都要问一声中不中?新郎根据实际情况回答不中

9.爆笑俯卧撑——让新娘平躺在床上,上面放一个汽球,再让新郎在上面做俯卧撑100个,新郎支持不住时会压在新娘身上,他俩之间的汽球就会爆炸,给洞房之夜带来欢乐。

10.口红诉真情——让新娘口含一支口红,在新郎脸上写下“I LOVE YOU”,再让新郎和新娘脸贴着脸,直至新娘脸上也印上“I LOVE YOU”,大家都认可为止。

11.肉麻够不够——让新郎对新娘说甜言蜜语,直到大家都认为够肉麻为止。

12.谁是真新郞——在房间中间或前面放四把椅子,然后叫新郎及三位男士站在椅子前。现在,蒙上新娘的眼睛,她通过触摸这些男士的胸部来认出哪个是新郎。无论她知道与否,让她检查一次,让新娘原地转几圈后,她再次触摸的感觉是相同的,揭开布。

13.安能辩雄雌——让新郎新娘互换结婚礼服作为闹洞房的结束曲,即新郎穿婚纱,新娘穿西装将所有客人送到大门外。

14.零存整取——准备12颗大小适中的硬水果糖,让新郎按照1-12月的方式,用口含一颗糖说老婆,我爱你,直到含住12颗糖。再由新娘与新郎口对口将新郎的12颗糖一次转移至自己口中,含着糖说三遍:老公,我爱你。再将糖吐到一个盘子里,大家检查是否有被新人吞掉的糖,少一颗,罚一遍,直到满意为止。

15.乌鸦喝水——新娘坐在椅子上,头上仰、面朝天、嘴张大、嘴里含一大口茶水。桌上摆一些糖果、花生。新郎扮乌鸦,双臂伸直、躬腰90度、嘴里模仿乌鸦叫……”,绕新娘一周后伸头望新娘口中,发现有水,欢快地蹦到桌旁用嘴叼一颗糖,蹦回新娘身旁,将糖果用嘴投入新娘口中,然后伏身喝一口水,往返3 次。

16.香蕉蹦极——用弹性绳捆住香蕉吊于新郎跃起能够到的高度,新郎用嘴拉下香蕉。新郎新娘用嘴剥皮,然后共同把它吃完。为了不让绳子缩回,一个做动作,另一个必须咬住香蕉,这就要看两人的配合了。

17.旺火早()——将火柴插于红枣上,在盛水的盆里漂浮。一根红线中间扎一支点燃的香烟,两头分别由新人咬住,两人你进我退,合力用烟点燃盆中的火柴。要屏住呼吸,用扎实的牙功与眼光才能获得成功。

18.亲亲甜心——新郎仰面躺在床上,然后把切得薄薄的香蕉片贴在他的脸上和脖子上,让蒙着眼睛的新娘用嘴去找那些香蕉片。

19.添筷子——(寓意添子)将一根筷子放到啤酒瓶子里,露出1公分左右,让新郎新娘用舌头合作添出来。

20.擀面条——:新郎仰面躺着,让新娘用啤酒瓶子(或短木棍)从头擀到脚,直到新郎的**硬了,面条才算擀好。

21.敲锣打鼓——新郎腰部用绳系一个大勺子,新娘腰部系一个平底锅,新郎挺腰用勺子敲打锅,连续10下,并且两人分别大喊铁人王进喜的口号:大干、快上、勤打井、多出油;要够响,大家听满意为止。

22.新郎裤子后面吊一根筷子,地上放一个啤酒瓶,要求由新娘指挥,新郎下蹲把筷子插入瓶子,最后要问进去了吗?答进去了。

23.准备了香蕉一根及保险套,当场示范正确的使用保险套的方法。

24.让新郎新娘用身体摆出阿拉伯数字09。摆26个英文字母更厉害。

25.新郎皮带扣下吊一根香蕉,让新娘吃,边吃边问她好不好吃。

26.新娘仰躺,新郎手撑于新娘头两侧,面对面做俯卧撑,做一个亲一个。

27.把新郎新娘推进被窝,要求他们扔18样东西出来。

28.新娘分糖——即要新娘顺时针点人数,"一二三"" 一二三"每点到""的那位才可以拿一包糖,拿了糖以后便离开这个圈子。让新娘不断点下去,直到每个人都拿到糖,不过新郎必须最后一个拿到喜糖,否则要受罚的。

29.运转乾坤——将鸡的不同部位如鸡头、鸡尾、鸡翼、鸡脾、鸡胸、鸡颈等放在碟上,再将碟放在转盆上,由新郎转动,那一部位转向自己,就要吻新娘身体的那一部位。

30.相亲相爱——要求新人当众亲热,并可要求指定动作,如长吻、深吻等。

31.鲤跃龙门——要求新娘分开两脚站著作龙门,用牙签插满在橙上,当作足球,由新郎负责踢入龙门,若一踢不入则罚饮酒。

32.比翼双飞——新郎抱着新娘绕场一周,限时完成。

33.如鱼得水——新娘将冰含在口中,再与新郎接吻,直至冰块完全溶解为止。

34.举杯畅饮——放两枝饮管在啤酒内,限时要新人将酒喝光,超时则再来一杯。

35.心有灵犀——蒙着新娘双眼,新郎则与众兄弟排成一列,让新娘逐个摸索,限时找出新郎。

36.红唇猎艳——众姊妹与新娘齐齐将嘴唇印在纸上,让新郎找出新娘的唇印,找错了则罚唱情歌。

37.夫唱妇随——由兄弟姊妹点唱,新人一边唱,一边配合歌词做动作,若不满意,罚再由头唱,直至满意为止。

38.心心相印——将一个气球夹在新人胸前,限时间内走毕一段路而不让汽球掉下,到终点时要合力把汽球压破(不得用手),以示成功。

39.招财进宝——将一钱币由新娘放入新郎的手袖内,从一边穿过另一边的手袖。钱币不能掉下,及必须经过新郎的胸膛。

40.口福不浅——新娘蒙着眼睛,喂新郎吃蛋糕。新郎的头不能移动,只能用说话提示新娘的方向。

41.白头偕老——找一个大圆盘,里面盛满面粉,在面粉里埋一颗糖果,然后要求新郎新娘采取吹面粉的方式把糖果找出来,效果可想而知,新郎新娘必定是满头面粉,白头偕老。

吃水不忘挖井人,希望大家支持一下写这篇文章作者:http://www.cnblogs.com/thinhunan/archive/2006/04/01/DeveloperNotesForPrototype.html

看到一个很好的东西在国内没有被很多人使用起来,实在是不爽,所以花了很大功夫把这个手册翻译成中文,由于这篇文章很长,所以,翻译的工作量很大而且有些地方英文版也没有说清楚,虽得查看源代码,好在不是坚持做完了,大家鼓励下啊!^o^
prototype.js是一个非常优雅的javascript基础类库,对javascript做了大量的扩展,而且很好的支持Ajax,国外有多个基于此类库实现的效果库,也做得很棒。
prototype.js不仅是一个有很大实用价值的js库,而且有很高的学习价值,所以我强烈建议B/S开发人员和对JS开发感兴趣的朋友去浏览一些它的源代码,其中有很多的珠玑,你绝对会觉得读它的源代码是一种享受,当然要读得懂,呵呵。
网上也有人写过1.3版的源码解读,大家可以找来看看。不过1.4版做了很大的扩充,所以希望有朋友写出1.4版的源码解读。
几点说明:

prototype.js是什么?
万一你没有使用过大名鼎鼎的prototype.js,那么让我来告诉你,prototype.js是由Sam Stephenson写的一个javascript类库。这个构思奇妙,而且兼容标准的类库,能帮助你轻松建立有高度互动的web2.0特性的富客户端页面。

如果你最近尝试使用它,你大概了解到文档并不是作者的一个强项。和在我以前使用这个类库的不少开发者一样,一开始,我不得不一头扎进阅读prototype.js的源代码和实验它的功能中。我想,在我学习完它之后,把我学到的东西分享给大家是件不错的事。

同时,在本文中,我也将提供一个关于这个类库提供的objects,classes,functions,extensions这对东东的非官方参考

在阅读这个文档时,熟悉Ruby的开发者将会注意到Ruby的一些内建类和本类库扩展实现之间非常相似。

相关文章
Advanced JavaScript guide.

一些实用的函数
这个类库带有很多预定义的对象和实用函数,这些东东的目的显然是把你从一些重复的打字中解放出来 。

使用$()方法
$() 方法是在DOM中使用过于频繁的 document.getElementById() 方法的一个便利的简写,就像这个DOM方法一样,这个方法返回参数传入的id的那个元素。

比起DOM中的方法,这个更胜一筹。你可以传入多个id作为参数然后 $() 返回一个带有所有要求的元素的一个 Array 对象。

<HTML>
<HEAD>
<TITLE> Test Page </TITLE>
<script src="prototype-1.3.1.js"></script>
<script>
function test1()
{
var d = $('myDiv');
alert(d.innerHTML);
}
function test2()
{
var divs = $('myDiv','myOtherDiv');
for(i=0; i<divs.length; i++)
{
alert(divs[i].innerHTML);
}
}
</script>
</HEAD>
<BODY>
<div id="myDiv">
<p>This is a paragraph</p>
</div>
<div id="myOtherDiv">
<p>This is another paragraph</p>
</div>
<input type="button" value=Test1 onclick="test1();"><br>
<input type="button" value=Test2 onclick="test2();"><br>
</BODY>
</HTML>另外一个好处是,这个函数能传入用string表示的对象ID,也可以传入对象本身,这样,在建立其它能传两种类型的参数的函数时非常有用。

使用$F()函数
$F()函数是另一个大收欢迎的“快捷键”,它能用于返回任何表单输入控件的值,比如text box,drop-down list。这个方法也能用元素id或元素本身做为参数。

<script>
function test3()
{
alert(  $F('userName')  );
}
</script>
<input type="text" id="userName" value="Joe Doe"><br>
<input type="button" value=Test3 onclick="test3();"><br>
使用$A()函数
$A()函数能把它接收到的单个的参数转换成一个Array对象。

这个方法,结合被本类库扩展了的Array类,能方便的把任何的可枚举列表转换成或拷贝到一个Array对象。一个推荐的用法就是把DOM Node Lists转换成一个普通的Array对象,从而更有效率的进行遍历,请看下面的例子。

<script>
function showOptions(){
var someNodeList = $('lstEmployees').getElementsByTagName('option');
var nodes = $A(someNodeList);
nodes.each(function(node){
alert(node.nodeName + ': ' + node.innerHTML);
});
}
</script>
<select id="lstEmployees" size="10" >
<option value="5">Buchanan, Steven</option>
<option value="8">Callahan, Laura</option>
<option value="1">Davolio, Nancy</option>
</select>
<input type="button" value="Show the options" onclick="showOptions();" >

使用 $H() 函数
$H()函数把一些对象转换成一个可枚举的和联合数组类似的Hash对象。

<script>
function testHash()
{
//let's create the object
var a = {
first: 10,
second: 20,
third: 30
};
//now transform it into a hash
var h = $H(a);
alert(h.toQueryString()); //displays: first=10&second=20&third=30
}
</script>

使用$R()函数
$R()是new ObjectRange(lowBound,upperBound,excludeBounds)的缩写。

跳到ObjectRange 类文档可以看到一个关于此类的完整描述. 此时,我们还是先来看一个例子以展示这个缩写能代替哪些方法吧。其它相关的一些知识可以在Enumerable 对象文档中找到。

<script>
function demoDollar_R(){
var range = $R(10, 20, false);
range.each(function(value, index){
alert(value);
});
}
</script>
<input type="button" value="Sample Count" onclick="demoDollar_R();" >

使用Try.these()函数
Try.these() 方法使得实现当你想调用不同的方法直到其中的一个成功正常的这种需求变得非常容易, 他把一系列的方法作为参数并且按顺序的一个一个的执行这些方法直到其中的一个成功执行,返回成功执行的那个方法的返回值。

在下面的例子中, xmlNode.text在一些浏览器中好用,但是xmlNode.textContent在另一些浏览器中正常工作。 使用Try.these()方法我们可以得到正常工作的那个方法的返回值。

<script>
function getXmlNodeValue(xmlNode){
    return Try.these(
        function() {return xmlNode.text;},
        function() {return xmlNode.textContent;)
        );
}
</script>
  


Ajax对象
上面提到的共通方法非常好,但是面对它吧,它们不是最高级的那类东西。它们是吗?你很可能自己编写了这些甚至在你的脚本里面有类似功能的方法。但是这些方法只是冰山一角。

我很肯定你对prototype.js感兴趣的原因很可能是由于它的AJAX能力。所以让我们解释当你需要完成AJAX逻辑的时候,这个包如何让它更容易。

Ajax 对象是一个预定义对象,由这个包创建,为了封装和简化编写AJAX 功能涉及的狡猾的代码。 这个对象包含一系列的封装AJAX逻辑的类。我们来看看其中几个类。

使用Ajax.Request类
如果你不使用任何的帮助程序包,你很可能编写了整个大量的代码来创建XMLHttpRequest对象并且异步的跟踪它的进程, 然后解析出响应 然后处理它。当你不需要支持多于一种类型的浏览器时你会感到非常的幸运。

为了支持 AJAX 功能。这个包定义了 Ajax.Request 类。

假如你有一个应用程序可以通过url http://yoursever/app/get_sales?empID=1234&year=1998与服务器通信。它返回下面这样的XML 响应。

<?xml version="1.0" encoding="utf-8" ?>
<ajax-response>
<response type="object" id="productDetails">
<monthly-sales>
<employee-sales>
<employee-id>1234</employee-id>
<year-month>1998-01</year-month>
<sales>$8,115.36</sales>
</employee-sales>
<employee-sales>
<employee-id>1234</employee-id>
<year-month>1998-02</year-month>
<sales>$11,147.51</sales>
</employee-sales>
</monthly-sales>
</response>
</ajax-response>
用 Ajax.Request对象和服务器通信并且得到这段XML是非常简单的。下面的例子演示了它是如何完成的。

<script>
function searchSales()
{
var empID = $F('lstEmployees');
var y = $F('lstYears');
var url = 'http://yoursever/app/get_sales';
var pars = 'empID=' + empID + '&year=' + y;

var myAjax = new Ajax.Request(
url,
{
method: 'get',
parameters: pars,
onComplete: showResponse
});

}
function showResponse(originalRequest)
{
//put returned XML in the textarea
$('result').value = originalRequest.responseText;
}
</script>
<select id="lstEmployees" size="10" onchange="searchSales()">
<option value="5">Buchanan, Steven</option>
<option value="8">Callahan, Laura</option>
<option value="1">Davolio, Nancy</option>
</select>
<select id="lstYears" size="3" onchange="searchSales()">
<option selected="selected" value="1996">1996</option>
<option value="1997">1997</option>
<option value="1998">1998</option>
</select>
<br><textarea id=result cols=60 rows=10 ></textarea>
你注意到传入 Ajax.Request构造方法的第二个对象了吗? 参数{method: 'get', parameters: pars, onComplete: showResponse} 表示一个匿名对象的真实写法。他表示你传入的这个对象有一个名为 method 值为 'get'的属性,另一个属性名为 parameters 包含HTTP请求的查询字符串,和一个onComplete 属性/方法包含函数showResponse。

还有一些其它的属性可以在这个对象里面定义和设置,如 asynchronous,可以为true 或 false 来决定AJAX对服务器的调用是否是异步的(默认值是 true)。

这个参数定义AJAX调用的选项。在我们的例子中,在第一个参数通过HTTP GET命令请求那个url,传入了变量 pars包含的查询字符串, Ajax.Request 对象在它完成接收响应的时候将调用showResponse 方法。

也许你知道, XMLHttpRequest在HTTP请求期间将报告进度情况。这个进度被描述为四个不同阶段:Loading, Loaded, Interactive, 或 Complete。你可以使 Ajax.Request 对象在任何阶段调用自定义方法 ,Complete 是最常用的一个。想调用自定义的方法只需要简单的在请求的选项参数中的名为 onXXXXX 属性/方法中提供自定义的方法对象。 就像我们例子中的 onComplete 。你传入的方法将会被用一个参数调用,这个参数是 XMLHttpRequest 对象自己。你将会用这个对象去得到返回的数据并且或许检查包含有在这次调用中的HTTP结果代码的 status 属性。

还有另外两个有用的选项用来处理结果。我们可以在onSuccess 选项处传入一个方法,当AJAX无误的执行完后调用, 相反的,也可以在onFailure选项处传入一个方法,当服务器端出现错误时调用。正如onXXXXX 选项传入的方法一样,这两个在被调用的时候也传入一个带有AJAX请求的XMLHttpRequest对象。

我们的例子没有用任何有趣的方式处理这个 XML响应, 我们只是把这段XML放进了一个文本域里面。对这个响应的一个典型的应用很可能就是找到其中的想要的信息,然后更新页面中的某些元素, 或者甚至可能做某些XSLT转换而在页面中产生一些HTML。

 在1.4.0版本中,一种新的事件回传外理被引入。如果你有一段代码总是要为一个特殊的事件执行,而不管是哪个AJAX调用引发它,那么你可以使用新的Ajax.Responders对象。

假设你想要在一个AJAX调用正在运行时,显示一些提示效果,像一个不断转动的图标之类的,你可以使用两个全局事件Handler来做到,其中一个在第一个调用开始时显示图标,另一个在最后一个调用完成时隐藏图标。看下面的例子。

<script>
var myGlobalHandlers = {
onCreate: function(){
Element.show('systemWorking');
},
onComplete: function() {
if(Ajax.activeRequestCount == 0){
Element.hide('systemWorking');
}
}
};
Ajax.Responders.register(myGlobalHandlers);
</script>
<div id='systemWorking'><img src='spinner.gif'>Loading...</div>
更完全的解释,请参照 Ajax.Request 参考 和 Ajax选项参考。


使用Ajax.Updater类
如果你的服务器的另一端返回的信息已经是HTML了,那么使用这个程序包中 Ajax.Updater 类将使你的生活变得更加得容易。用它你只需提供哪一个元素需要被AJAX请求返回的HTML填充就可以了,例子比我写说明的更清楚。

<script>
function getHTML()
{
var url = 'http://yourserver/app/getSomeHTML';
var pars = 'someParameter=ABC';

var myAjax = new Ajax.Updater(
'placeholder',
url,
{
method: 'get',
parameters: pars
});

}
</script>
<input type=button value=GetHtml onclick="getHTML()">
<div id="placeholder"></div>
你可以看到,这段代码比前面的例子更加简洁,不包括 onComplete 方法,但是在构造方法中传入了一个元素id。 我们来稍稍修改一下代码来描述如何在客户端处理服务器段错误成为可能。

我们将加入更多的选项, 指定处理错误的一个方法。这个是用 onFailure 选项来完成的。我们也指定了一个 placeholder 只有在成功请求之后才会被填充。为了完成这个目的我们修改了第一个参数从一个简单的元素id到一个带有两个属性的对象, success (一切OK的时候被用到) 和 failure (有地方出问题的时候被用到) 在下面的例子中没有用到failure属性,而仅仅在 onFailure 处使用了 reportError 方法。

<script>
function getHTML()
{
var url = 'http://yourserver/app/getSomeHTML';
var pars = 'someParameter=ABC';

var myAjax = new Ajax.Updater(
{success: 'placeholder'},
url,
{
method: 'get',
parameters: pars,
onFailure: reportError
});

}
function reportError(request)
{
alert('Sorry. There was an error.');
}
</script>
<input type=button value=GetHtml onclick="getHTML()">
<div id="placeholder"></div>
如果你的服务器逻辑是连同HTML 标记返回JavaScript 代码, Ajax.Updater对象可以执行那段JavaScript代码。为了使这个对象对待响应为JavaScript,你只需在最后参数的对象构造方法中简单加入evalScripts: true属性。但是值得提醒的是,像这个选项名evalScripts暗示的,这些脚本会被执行,但是它们不会被加入到Page的脚本中。“有什么区别?”,可能你会这样问。我们假定请求地址返回的东东像这样:

<script language="javascript" type="text/javascript">
function sayHi(){
alert('Hi');
}
</script>
<input type=button value="Click Me" onclick="sayHi()">
如果你以前这样尝试过,你知道这些脚本不会如你所期望的那样工作,原因是这段脚本会被执行,但像上面这样的脚本执行并不会创建一个名叫sayHi的函数,它什么也不做。如果要创建一个函数,我们应当把代码改成下面这个样子:

<script language="javascript" type="text/javascript">
sayHi = function(){
alert('Hi');
};
</script>
<input type=button value="Click Me" onclick="sayHi()">
为什么我们在上面的代码中不使用var关键字来声明这个变量呢(指sayHi ),因为那样做创建出来的函数将只是当前脚本块的一个局部变量(至少在IE中是这样)。不写var关键字,创建出来的对象的作用域就是我们所期望的window。

更多相关知识,请参看  Ajax.Updater reference 和options reference.

枚举... 噢!噢!
你知道,我们都是这样来做循环的,建一个Array,用elements组织它们,再建一个循环结构(例如for,foreach,while)通过index数字来访问每一个element,再用这个element做一些动作。

当你想到这时,你会发现几乎每次写循环代码你都会迟早用到一个Array。那么,如果Array对象能够提供更多的功能给它们的迭代器使用不是很爽吗?确实是这样,事实上很多的编程语言都在它们的Array或其它类似的结构中(如Collections,Lists)提供一些这样的功能。

现在好了,prototype.js了给我们一个 Enumerable对象,它实现了很多和可迭代数据进行交互的窍门。和原有的JS对象相比prototype.js更上一层楼,它对Array 类s扩展了所有枚举要用的函数。

循环, Ruby样式的
在标准的javascript中,如果你想把一个array中的所有elements显示出来,你可以像下面代码这样写得很好:

<script>
function showList(){
var simpsons = ['Homer', 'Marge', 'Lisa', 'Bart', 'Meg'];
            for(i=0;i<simpsons.length;i++){
alert(simpsons[i]);
}
}
</script>
<input type="button" value="Show List" onclick="showList();" >
使用我们新的最好的朋友,prototype.js,我们可以把它生写成这样

      function showList(){
var simpsons = ['Homer', 'Marge', 'Lisa', 'Bart', 'Meg'];
            simpsons.each( function(familyMember){
alert(familyMember);
});
}
你可能会想“非常奇怪的方式...相对旧的,这种语法太怪异了”。哦,在上面的例子,确实什么也没有,在这个简单得要死例子中,也没有改变太多啊,尽管如此,请继续读下去。

在继续下面内容之前,你注意到那个被做为一个参数传递给each函数的函数?我们把它理解成迭代器函数。

Your arrays on steroids
就如我们上面提到的,把你的Array中的elements当成相同的类型使用相同的属性和函数是很通用(Common,不知该翻译成通用还是庸俗)的。让我们看看怎么样利用我们新的马力强劲的Arrays的迭代功能吧。

依照标准找到一个element。

<script>
function findEmployeeById(emp_id){
var listBox = $('lstEmployees')
var options = listBox.getElementsByTagName('option');
options = $A(options);
var opt = options.find( function(employee){
return (employee.value == emp_id);
});
alert(opt.innerHTML); //displays the employee name
}
</script>
<select id="lstEmployees" size="10" >
<option value="5">Buchanan, Steven</option>
<option value="8">Callahan, Laura</option>
<option value="1">Davolio, Nancy</option>
</select>
<input type="button" value="Find Laura" onclick="findEmployeeById(8);" >
现在我们再下一城,看看如何过滤一个Array中的元素,从每个元素中得到我们想要的成员。

<script>
function showLocalLinks(paragraph){
paragraph = $(paragraph);
var links = $A(paragraph.getElementsByTagName('a'));
//find links that do not start with 'http'
var localLinks = links.findAll( function(link){
var start = link.href.substring(0,4);
return start !='http';
});
//now the link texts
var texts = localLinks.pluck('innerHTML');
//get them in a single string
var result = texts.inspect();
alert(result);
}
</script>
<p id="someText">
This <a href="http://othersite.com/page.html">text</a> has
a <a href="http://www.gaoolp.com/admin.php#localAnchor">lot</a> of
<a href="http://www.gaoolp.com/admin.php#otherAnchor">links</a>. Some are
<a href="http://wherever.com/page.html">external</a>
and some are <a href="http://www.gaoolp.com/admin.php#someAnchor">local</a>
</p>
<input type=button value="Find Local Links" onclick="showLocalLinks('someText')">
上面的代码仅仅是一点小小的实践让人爱上这种语法。请参看 Enumerable和Array的所有函数

--------------------------------------------------------------------------------

prototype.js参考

JavaScript类扩展
prototype.js 类库实现强大功能的一种途径是扩展已有的JavaScript 类。


对 Object的扩展

Method Kind Arguments Description
extend(destination, source) static destination: any object, source: any object 提供一种通过拷贝所有源以象属性和函数到目标函数实现继承的方法
inspect(targetObj) static targetObj: any object 返回可读性好关于目标对象的文字描述,如果对象实例没有定义一个inspect函数,默认返回toString函数的值。

对Number的扩展

Method Kind Arguments Description
toColorPart() instance (none) 返回数字的十六进制表示形式。在把一个RGB数字转换成HTML表现形式时很有用。
succ() instance (none)  返回下一个数字,这个方法可用于迭代调用场景中。 
times(iterator) instance iterator: a function object conforming to Function(index) Calls the iterator function repeatedly passing the current index in the index argument. 反复调用iterator函数并传递当前index到iterator的index参数。 


下面的例子用提示框显示0-9。

<script>
function demoTimes(){
var n = 10;
n.times(function(index){
alert(index);
});
/***************************
* you could have also used:
*           (10).times( .... );
***************************/
}
</script>
<input type=button value="Test Number.times()" onclick="demoTimes()">

对 Function扩展

Method Kind Arguments Description
bind(object) instance object: the object that owns the method 返回function的实例,这个实例和源function的结构一样,但是它已被绑定给了参数中提供的object,就是说,function中的this指针指向参数object。
bindAsEventListener(object) instance object: the object that owns the method 用法和上面的bind一样,区别在于用来绑定事件。


让我们看看如何运用这些扩展。

<input type=checkbox id=myChk value=1> Test?
<script>
//declaring the class
var CheckboxWatcher = Class.create();
//defining the rest of the class implementation
CheckboxWatcher.prototype = {
initialize: function(chkBox, message) {
this.chkBox = $(chkBox);
this.message = message;
//assigning our method to the event

this.chkBox.onclick =
this.showMessage.bindAsEventListener(this);

},
showMessage: function(evt) {
alert(this.message + ' (' + evt.type + ')');
}
};
var watcher = new CheckboxWatcher('myChk', 'Changed');
</script>

对String的扩展

Method Kind Arguments Description
stripTags() instance (none) 返回一个把所有的HTML或XML标记都移除的字符串。
stripScripts() instance (none) 返回一个把所有的script都移除的字符串。
escapeHTML() instance (none) 返回一个把所有的HTML标记合适的转义掉的字符串。
unescapeHTML() instance (none) escapeHTML()的反转。
extractScripts() instance (none) 返回一个包含在string中找到的所有<script>的数组。
evalScripts() instance (none) 执行在string中找到的所有<script>。
toQueryParams() instance (none) 把querystring分割才一个用parameter name做index的联合Array,更像一个hash。
parseQuery() instance (none) 和toQueryParams()一样.
toArray() instance (none) 把字符串转换成字符数组.
camelize() instance (none) 转换一个以连字符连接的字符串成一个骆驼法样式的字符串。比如,这个函数在写代码时,把它做为一个样式工具使用是很有用的。

对  Array的扩展
因为array扩展于enumerable,所以所有enumberable对象的函数,array都是可以使用的,除此之外,下面的这些也是已经实现了的。


Method Kind Arguments Description
clear() instance (none) 清空。
compact() instance (none) 返回一个不包括源array中null或undefined元素的array,此方法不改变源array。
first() instance (none) 返回array的第一个对象。
flatten() instance (none) 通过递归组合array每个元素的子元素(如果该元素也是array)来返回一个“扁平的”一维的array。
indexOf(value) instance value: what you are looking for. 返回给出数字位置(从0算起)的元素,如果在该位置没有找到对象,返回-1。 
inspect() instance (none) 重载inspect(),返回更好格式的反映Array每个元素的字符描述。
last() instance (none) 返回最后一个元素。
reverse([applyToSelf]) instance applyToSelf: indicates if the array itself should also be reversed.  反转Array中元素的顺序,如果没有给出参数,或参数为true,则源Array中元素的顺序也反转,否则源Array保持不变。 
shift() instance (none) 返回Array的第一个元素并从Array中移除它,Array的Length-1。
without(value1 [, value2 [, .. valueN]]) instance value1 ... valueN: values to be excluded if present in the array.  返回一个把参数列表中包含的元素从源Array中排除的Array。 

document DOM扩展

Method Kind Arguments Description
getElementsByClassName(className [, parentElement]) instance className: name of a CSS class associated with the elements, parentElement: object or id of the element that contains the elements being retrieved. 返回所有CSS className属性等于className参数的元素,如果没有给出parentElement,那么将搜索document body。(此处使用document.body我觉得不如使用document,因为有时有的页面没有body)  

Event扩展

Property Type Description
KEY_BACKSPACE NumberNumber 8: Constant. Code for the Backspace key.
KEY_TAB Number 9: Constant. Code for the Tab key.
KEY_RETURN Number 13: Constant. Code for the Return key.
KEY_ESC Number 27: Constant. Code for the Esc key.
KEY_LEFT Number 37: Constant. Code for the Left arrow key.
KEY_UP Number 38: Constant. Code for the Up arrow key.
KEY_RIGHT Number 39: Constant. Code for the Right arrow key.
KEY_DOWN Number 40: Constant. Code for the Down arrow key.
KEY_DELETE Number 46: Constant. Code for the Delete key.
observers: Array List of cached observers. Part of the internal implementation details of the object.

Method Kind Arguments Description
element(event) static event: an Event object 返回事件源对象。
isLeftClick(event) static event: an Event object 如果点击了鼠标左键,返回true.
pointerX(event) static event: an Event object 返回鼠标的X座标。 
pointerY(event) static event: an Event object 返回鼠标的Y座标。
stop(event) static event: an Event object 使用此函数来中断事件的默认行为并阻止传递(冒泡)。
findElement(event, tagName) static event: an Event object, tagName: name of the desired tag. 从事件源对象开始向上搜索DOM树,直到找到第一个符合tagName的元素
observe(element, name, observer, useCapture) static element: object or id, name: event name (like 'click', 'load', etc), observer: function to handle the event, useCapture: if true, handles the event in the capture phase and if false in the bubbling phase. 为对象的某个事件增加一个处理函数。
stopObserving(element, name, observer, useCapture) static element: object or id, name: event name (like 'click'), observer: function that is handling the event, useCapture: if true handles the event in the capture phase and if false in the bubbling phase. 和上面的函数相反。
_observeAndCache(element, name, observer, useCapture) static   私有函数,别管它。
unloadCache() static (none) 私有函数,别管它。从内存中清除所有的observers缓存。


下面代码演示如何给window添加一个load事件处理函数。

<script>
Event.observe(window, 'load', showMessage, false);
function showMessage() {
alert('Page loaded.');
}
</script>

在prototype.js中定义新的对象和类
另一个这个程序包帮助你的地方就是提供许多既支持面向对象设计理念又有共通功能的许多对象。


The PeriodicalExecuter object
这个对象提供一定间隔时间上重复调用一个方法的逻辑。


Method Kind Arguments Description
[ctor](callback, interval) constructor callback: a parameterless function, interval: number of seconds 创建这个对象的实例将会重复调用给定的方法。

Property Type Description
callback Function() 被调用的方法,该方法不能传入参数。
frequency Number 以秒为单位的间隔。
currentlyExecuting Boolean 表示这个方法是否正在执行。

The Prototype object
Prototype 没有太重要的作用,只是声明了该程序包的版本 。


Property Type Description
Version String 版本。
emptyFunction Function() 空函数。
K Function(obj) 一个仅仅回传参数的函数。
ScriptFragment String 识别script的正则式。

The Enumerable object
Enumberable对象能够已更优雅的方式实现对列表样式的结构进行枚举。

很多其它的对象通过扩展自Enumberable对象来得到这些有用的接口。


Method Kind Arguments Description
each(iterator) instance iterator: a function object conforming to Function(value, index) 把每个element做为第一个参数,element的index作为第一个参数调用iterator函数。
all([iterator]) instance iterator: a function object conforming to Function(value, index) 这个函数会用给出的iterator测试整个集合,如果集合中任一元素在iterator函数测试中返回false或null,那么这个函数返回false,否则返回true。如果没有给出iterator,那么就会测试所有的元素是不是不等于false和null。你可以简单的把它看成是“检测每个元素都为非空非负”。 
any(iterator) instance iterator: a function object conforming to Function(value, index), optional. 这个函数会用给出的iterator测试整个集合,如果集合中任一元素在iterator函数测试中返回true,那么这个函数返回true,否则返回false。如果没有给出iterator,那么就会测试所有的元素是不是有一个不等于false和null。你可以简单的把它看成是“检测元素中是不是有非空非负的”。 
collect(iterator) instance iterator: a function object conforming to Function(value, index)  调用iterator函数根据集合中每个元素返回一个结果,然后按照原来集合中的顺序,返回一个Array。 
detect(iterator) instance iterator: a function object conforming to Function(value, index) 集合中每个元素调用一次Iterator,返回第一个使Iterator返回True的元素,如果最终都没有为true的调用,那么返回null。 
entries() instance (none) 等于toArray(). 
find(iterator) instance iterator: a function object conforming to Function(value, index) 等于 detect(). 
findAll(iterator) instance iterator: a function object conforming to Function(value, index) 集合中每个元素调用Iterator,返回一个由所有调用Iterator返回结果等于true的元素组成的数组。和reject()相反。 
grep(pattern [, iterator]) instance pattern: a RegExp object used to match the elements, iterator: a function object conforming to Function(value, index)  用pattern参数正则表达式测试集合中的每个元素,返回一个包含所有匹配正则式的元素的Array,如果给出了Iterator,那个每个结果还要经过一下Iterator处理。 
include(obj) instance obj: any object  判断集合中包不包含指定对象。 
inject(initialValue, iterator) instance initialValue: any object to be used as the initial value, iterator: a function object conforming to Function(accumulator, value, index)  用Iterator联接所有集合中的元素。Iterator在被调用时把上一次迭代的结果做为第一个参数传给accumulator。第一次迭代时,accurmelator等于initialValue,最后返回accumulator的值。 
invoke(methodName [, arg1 [, arg2 [...]]]) instance methodName: name of the method that will be called in each element, arg1..argN: arguments that will be passed in the method invocation. 集合中的每个元素调用指定的函数(查看源代码可以发现指定函数被调用时,this指针被传成当前元素),并传入给出的参数,返回调用结果组成的Array。 
map(iterator) instance iterator: a function object conforming to Function(value, index) 同collect(). 
max([iterator]) instance iterator: a function object conforming to Function(value, index) 返回集合中元素的最大值,或调用Iterator后返回值的最大值(如果给出了Iterator的话)。 
member(obj) instance obj: any object 同 include(). 
min([iterator]) instance iterator: a function object conforming to Function(value, index) 返回最小值,参见max()。 
partition([iterator]) instance iterator: a function object conforming to Function(value, index) 返回一个包含两个Array的Array,第一个Array包含所有调用Iterator返回True的元素,第二个Array包含剩下的元素。如果Iterator没有给出,那么就根据元素本身判断。 
pluck(propertyName) instance propertyName name of the property that will be read from each element. This can also contain the index of the element 返回每个元素的指定属性名的属性的值组成的Array。 
reject(iterator) instance iterator: a function object conforming to Function(value, index) 和  findAll()相反(返回所有等于false的元素). 
select(iterator) instance iterator: a function object conforming to Function(value, index) 同 findAll(). 
sortBy(iterator) instance iterator: a function object conforming to Function(value, index) 根据每个元素调用Iterator返回的值进行排序返回一个Array。 
toArray() instance (none) 返回由集合所有元素组成的一个Array。 
zip(collection1[, collection2 [, ... collectionN [,transform]]]) instance collection1 .. collectionN: enumerations that will be merged, transform: a function object conforming to Function(value, index) 合并每个给出的集合到当前集合。合并操作返回一个新的array,这个array的元素个数和原集合的元素个数一样,这个array的每个元素又是一个子array,它合并了所有集合中相同index的元素。如果transform函数被指定,那么array的每个元素还会调用transform函数先做处理。举个例子: [1,2,3].zip([4,5,6], [7,8,9]).inspect() 返回 "[ [1,4,7],[2,5,8],[3,6,9] ]" 

The Hash object
 Hash对象实现一种Hash结构,也就是一个Key:Value对的集合。

Hash中的每个Item是一个有两个元素的array,前一个是Key,后一个是Value,每个Item也有两个不需加以说明的属性,key和value。


Method Kind Arguments Description
keys() instance (none) 返回所有Item的key的集合的一个array。 
values() instance (none) 返回所有Item的value的集合的一个array。 
merge(otherHash) instance otherHash: Hash object 合并给出的Hash,返回一个新Hash。 
toQueryString() instance (none) 以QueryString那样的样式返回hash中所有的item,例如: 'key1=value1&key2=value2&key3=value3' 
inspect() instance (none) 用一种合适的方法显示hash中的key:value对。

The ObjectRange class
继承自  Enumerable

用上、下边界描述一个对象区域。


Property Type Kind Description
start (any) instance range的下边界
 
end (any) instance range的上边界
exclusive Boolean instance 决定边界自身是不是range的一部分。

Method Kind Arguments Description
[ctor](start, end, exclusive) constructor start: the lower bound, end: the upper bound, exclusive: include the bounds in the range? 创建一个range对象,从start生成到end,这里要注意的是,start和end必段类型一致,而且该类型要有succ()方法。 
include(searchedValue) instance searchedValue: value that we are looking for 检查一个value是不是在range中。 

The Class object
在这个程序包中 Class 对象在声明其他的类时候被用到 。用这个对象声明类使得新类支持 initialize() 方法,他起构造方法的作用。

看下面的例子

//declaring the class
var MySampleClass = Class.create();

//defining the rest of the class implmentation
MySampleClass.prototype = {

   initialize: function(message) {
this.message = message;
   },

   showMessage: function(ajaxResponse) {
      alert(this.message);
   }
};

//now, let's instantiate and use one object
var myTalker = new MySampleClass('hi there.');
myTalker.showMessage(); //displays alert


Method Kind Arguments Description
create(*) instance (any) 定义新类的构造方法。

The Ajax object
这个对象被用作其他提供AJAX功能的类的根对象。


Property Type Kind Description
activeRequestCount Number instance 正在处理中的Ajax请求的个数。

Method Kind Arguments Description
getTransport() instance (none) 返回新的XMLHttpRequest 对象。

The Ajax.Responders object
继承自 Enumerable

这个对象维持一个在Ajax相关事件发生时将被调用的对象的列表。比如,你要设置一个全局钩子来处理Ajax操作异常,那么你就可以使用这个对象。


Property Type Kind Description
responders Array instance 被注册到Ajax事件通知的对象列表。

Method Kind Arguments Description
register(responderToAdd) instance responderToAdd: object with methods that will be called. 被传入参数的对象应包含名如Ajax事件的系列方法(如onCreate,onComplete,onException)。通讯事件引发所有被注册的对象的合适名称的函数被调用。 
unregister(responderToRemove) instance responderToRemove: object to be removed from the list.  从列表中移除。 
dispatch(callback, request, transport, json) instance callback: name of the AJAX event being reported, request: the Ajax.Request object responsible for the event, transport: the XMLHttpRequest object that carried (or is carrying) the AJAX call, json: the X-JSON header of the response (if present)  遍历被注册的对象列表,找出有由callback参数决定的那个函数的对象。然后向这些函数传递其它的三个参数,如果Ajax响应中包含一个含有JSON内容的X-JSON HTTP头,那么它会被热行并传入json参数。如果事件是onException,那么transport参数会被异常代替,json不会传递。 

The Ajax.Base class
这个类是其他在Ajax对象中定义的类的基类。


Method Kind Arguments Description
setOptions(options) instance options: AJAX options 设定AJAX操作想要的选项。
responseIsSuccess() instance (none) 返回 true 如果AJAX操作成功,否则为 false 。
responseIsFailure() instance (none) 与 responseIsSuccess() 相反。

The Ajax.Request class
继承自 Ajax.Base

封装 AJAX 操作


Property Type Kind Description
Events Array static 在AJAX操作中所有可能报告的事件/状态的列表。这个列表包括: 'Uninitialized', 'Loading', 'Loaded', 'Interactive', 和 'Complete'。
transport XMLHttpRequest instance 承载AJAX操作的 XMLHttpRequest 对象。
url string instance 请求的URL。

Method Kind Arguments Description
[ctor](url, options) constructor url: the url to be fetched, options: AJAX options 创建这个对象的一个实例,它将在给定的选项下请求url。onCreate事件在调用constructor事被激发。 重要: 如果选择的url受到浏览器的安全设置,他会一点作用也不起。 很多情况下,浏览器不会请求与当前页面不同主机(域名)的url。 你最好只使用本地url来避免限制用户配置他们的浏览器(谢谢Clay)
evalJSON() instance (none) 这个方法显然不会被外部调用。它在Ajax响应中含有X-JSON HTTP头时用于内部调用执行这些内容。
evalReponse() instance (none) 这也方法显然不会被外部调用,如果Ajax响应含有一个值为text/javascript的Cotent-Type头,那么这个方法就用被调用执行响应体。
header(name) instance name: HTTP header name 引用Ajax响应的头的内容,在Ajax访问结束后再调用这个方法。
onStateChange() instance (none) 这个方法通常不会被外部调用。 当AJAX请求状态改变的时候被这个对象自己调用。
request(url) instance url: url for the AJAX call 这个方法通常不会被外部调用。已经在构造方法中调用了。
respondToReadyState(readyState) instance readyState: state number (1 to 4) 这个方法通常不会被外部调用。 当AJAX请求状态改变的时候被这个对象自己调用。
setRequestHeaders() instance (none) 这个方法通常不会被外部调用。 被这个对象自己调用来配置在HTTP请求要发送的HTTP报头。

The options argument object
An important part of the AJAX operations is the options argument. There's no options class per se. Any object can be passed, as long as it has the expected properties. It is common to create anonymous objects just for the AJAX calls.


Property Type Default Description
method String 'post' HTTP 请求方式。
parameters String '' 在HTTP请求中传入的url格式的值列表。
asynchronous Boolean true 指定是否做异步 AJAX 请求。
postBody String undefined 在HTTP POST的情况下,传入请求体中的内容。
requestHeaders Array undefined 和请求一起被传入的HTTP头部列表, 这个列表必须含有偶数个项目, 任何奇数项目是自定义的头部的名称, 接下来的偶数项目使这个头部项目的字符串值。 例子:['my-header1', 'this is the value', 'my-other-header', 'another value'] 
onXXXXXXXX Function(XMLHttpRequest, Object) undefined 在AJAX请求中,当相应的事件/状态形成的时候调用的自定义方法。 例如 var myOpts = {onComplete: showResponse, onLoaded: registerLoaded};. 这个方法将被传入一个参数, 这个参数是承载AJAX操作的 XMLHttpRequest 对象,另一个是包含被执行X-JSON响应HTTP头。
onSuccess Function(XMLHttpRequest, Object) undefined 当AJAX请求成功完成的时候调用的自定义方法。 这个方法将被传入一个参数, 这个参数是承载AJAX操作的 XMLHttpRequest 对象,另一个是包含被执行X-JSON响应HTTP头。
onFailure Function(XMLHttpRequest, Object) undefined 当AJAX请求完成但出现错误的时候调用的自定义方法。这个方法将被传入一个参数, 这个参数是承载AJAX操作的 XMLHttpRequest 对象,另一个是包含被执行X-JSON响应HTTP头。
onException Function(Ajax.Request, exception) undefined 当一个在客户端执行的Ajax发生像无效响应或无效参数这样的异常情况时被调用的自定义函数。它收到两个参数,包含异常Ajax操作的Ajax.Request对象和异常对象。
insertion an Insertion class undefined 一个能决定怎么样插入新内容的类,能 Insertion.Before, Insertion.Top, Insertion.Bottom, 或 Insertion.After. 只能应用于Ajax.Updater 对象. 
evalScripts Boolean undefined, false 决定当响应到达的时候是否执行其中的脚本块,只在 Ajax.Updater 对象中应用。
decay Number undefined, 1 决定当最后一次响应和前一次响应相同时在 Ajax.PeriodicalUpdater 对象中的减漫访问的次数, 例如,如果设为2,后来的刷新和之前的结果一样, 这个对象将等待2个设定的时间间隔进行下一次刷新, 如果又一次一样, 那么将等待4次,等等。 不设定这个只,或者设置为1,将避免访问频率变慢。
frequency Number undefined, 2 用秒表示的刷新间的间隔,只能应用于 Ajax.PeriodicalUpdater  对象。 

The Ajax.Updater class
继承自 Ajax.Request

当请求的url返回一段HTML而你想把它直接放置到页面中一个特定的元素的时候被用到。 如果url的返回<script> 的块并且想在接收到时就执行它的时候也可以使用该对象。含有脚本的时候使用 evalScripts 选项。


Property Type Kind Description
containers Object instance 这个对象包含两个属性:AJAX请求成功执行的时候用到 containers.success , 否则的话用到 containers.failure 。

Method Kind Arguments Description
[ctor](container, url, options) constructor container:this can be the id of an element, the element object itself, or an object with two properties - object.success element (or id) that will be used when the AJAX call succeeds, and object.failure element (or id) that will be used otherwise. url: the url to be fetched, options: AJAX options 创建一个用给定的选项请求给定的url的一个实例。
updateContent() instance (none) 这个方法通常不会被外部调用。 当响应到达的时候,被这个对象自己调用。 它会用HTML更新适当的元素或者调用在 insertion 选项中传入的方法-这个方法将被传入两个参数, 被更新的元素和响应文本。 

The Ajax.PeriodicalUpdater class
继承自Ajax.Base

这个类重复生成并使用 Ajax.Updater 对象来刷新页面中的一个元素。或者执行 Ajax.Updater 可以执行的其它任务。更多信息参照 Ajax.Updater 参考 。


Property Type Kind Description
container Object instance 这个值将直接传入Ajax.Updater的构造方法。
url String instance 这个值将直接传入Ajax.Updater的构造方法。
frequency Number instance 两次刷新之间的间隔 (不是频率) ,以秒为单位。 默认2秒。 This 当调用 Ajax.Updater 对象的时候,这个数将和当前的 decay 相乘。 
decay Number instance 重负执行任务的时候保持的衰败水平。
updater Ajax.Updater instance 最后一次使用的 Ajax.Updater 对象
timer Object instance 通知对象该下一次更新时用到的JavaScript 计时器。

Method Kind Arguments Description
[ctor](container, url, options) constructor container:this can be the id of an element, the element object itself, or an object with two properties - object.success element (or id) that will be used when the AJAX call succeeds, and object.failure element (or id) that will be used otherwise. url: the url to be fetched, options: AJAX options 创建一个用给定的选项请求给定的url的一个实例。
start() instance (none) 这个方法通常不会被外部调用。 对象为了开始周期性执行任务的时候调用的方法。 
stop() instance (none) 使对象停止执行周期任务。停止后,如果有onComplete选项,那么引发callback。 
updateComplete() instance (none) 这个方法通常不会被外部调用。 被当前的 Ajax.Updater 使用,当一次请求结束的时候,它被用作计划下一次请求。 
onTimerEvent() instance (none) 这个方法通常不会被外部调用。当到下一次更新时被内部调用。 

The Element object
这个对象提供在操作DOM中元素时使用的功能性方法。


Method Kind Arguments Description
addClassName(element, className) instance element: element object or id, className: name of a CSS class 将给出的className添加到对象的className属性中。
classNames(element) instance element: element object or id 返回一个Element.ClassName的对象表示CSS 给出对象有的class names。
cleanWhitespace(element) instance element: element object or id 清除对象子元素中所有空白的text node。
empty(element) instance element: element object or id 返回一个布尔值指示对象为空或只有空白字符。
getDimensions(element) instance element: element object or id 返回对象的尺寸,返回值有两个属性,height和width。 
getHeight(element) instance element: element object or id 返回元素的 offsetHeight 。
getStyle(element, cssProperty) instance element: element object or id, cssProperty name of a CSS property (either format 'prop-name' or 'propName' works). 返回给定对象的CSS属性值或没有指定cssProperty时返回null。
hasClassName(element, className) instance element: element object or id, className: name of a CSS class 返回 true 如果元素的类名中含有给定的类名
hide(elem1 [, elem2 [, elem3 [...]]]) instance elemN: element object or id 通过设定style.display 为 'none'来隐藏每个传入的元素。 
makeClipping(element) instance element: element object or id 能过设定overflow的值设定内容溢出剪辑。
makePositioned(element) instance element: element object or id 更改对象的style.position为'relative'。
remove(element) instance element: element object or id 从document对象中删除指定的元素。
removeClassName(element, className) instance element: element object or id, className: name of a CSS class 从元素的类名中删除给定的类名。
scrollTo(element) instance element: element object or id 滚动window到对象的位置。
setStyle(element, cssPropertyHash) instance element: element object or id, cssPropertyHash Hash object with the styles to be applied. 依照cssPropertyHash参数给对象设置CSS属性值。
show(elem1 [, elem2 [, elem3 [...]]]) instance elemN: element object or id 用设定它的 style.display 为 ''来显示每个传入的元素。 
toggle(elem1 [, elem2 [, elem3 [...]]]) instance elemN: element object or id 切换每一个传入元素的可视性。
undoClipping(element) instance element: element object or id style.overflow的值返回上一个设定值。
undoPositioned(element) instance element: element object or id 清除对象的 style.position 为 ''
update(element, html) instance element: element object or id, html: html content 用给出的HTML参数替换对象的innerHTML,如果HTML参数中包含<script>,那么它们不会被包含进去,但是会执行。 
visible(element) instance element: element object or id 返回一个布尔值指示对象可不可见。

The Element.ClassNames class
继承自  Enumerable

在一个对象中表示CSS class names的集合。


Method Kind Arguments Description
[ctor](element) constructor element: any DOM element object or id 创建一个对象,给出对象的CSS class names被表现在这个ClassNames对象中。 
add(className) instance className: a CSS class name 把CSS class name包含进对象的class names 列表。 
remove(className) instance className: a CSS class name 从对象的class names列表中移除className 
set(className) instance className: a CSS class name 设定对象CSS class name为className,移除其它class names。 

The Abstract object
这个对象是这个程序包中其他类的根。它没有任何属性和方法。在这个对象中定义的类可以被视为传统的抽象类。


The Abstract.Insertion class
这个类被用作其他提供动态内容插入功能的类的基类,它像一个抽象类一样被使用。


Method Kind Arguments Description
[ctor](element, content) constructor element: element object or id, content: HTML to be inserted 创建一个可以帮助插入动态内容的对象。
contentFromAnonymousTable() instance (none) 对content通过匿名表格变成一个Node数组。

Property Type Kind Description
adjacency String static, parameter 这个参数指定相对于给定元素,内容将被放置的位置。 可能的值是: 'beforeBegin', 'afterBegin', 'beforeEnd', 和 'afterEnd'.
element Object instance 与插入物做参照元素对象。
content String instance 被插入的 HTML 。

The Insertion object
这个对象是其他类似功能的根。它没有任何属性和方法。在这个对象中定义的类仍然可以被视为传统的抽象类。


The Insertion.Before class
继承自 Abstract.Insertion

在给定元素开始标记的前面插入HTML。


Method Kind Arguments Description
[ctor](element, content) constructor element: element object or id, content: HTML to be inserted 继承自   Abstract.Insertion. 创建一个可以帮助插入动态内容的对象。


下面的代码
<br>Hello, <span id="person" style="color:red;">Wiggum. How's it going?</span>
<script> new Insertion.Before('person', 'Chief '); </script>
将把 HTML 变为
<br>Hello, Chief <span id="person" style="color:red;">Wiggum. How's it going?</span>

The Insertion.Top class
继承自 Abstract.Insertion

在给定元素第一个子节点位置插入 HTML。内容将位于元素的开始标记的紧后面。


Method Kind Arguments Description
[ctor](element, content) constructor element: element object or id, content: HTML to be inserted 继承自  Abstract.Insertion. 创建一个可以帮助插入动态内容的对象。


下面的代码
<br>Hello, <span id="person" style="color:red;">Wiggum. How's it going?</span>
<script> new Insertion.Top('person', 'Mr. '); </script>
将把 HTML 变为
<br>Hello, <span id="person" style="color:red;">Mr. Wiggum. How's it going?</span>

The Insertion.Bottom class
Inherits from Abstract.Insertion

在给定元素最后一个子节点位置插入 HTML。内容将位于元素的结束标记的紧前面。


Method Kind Arguments Description
[ctor](element, content) constructor element: element object or id, content: HTML to be inserted Inherited from Abstract.Insertion. Creates an object that will help with dynamic content insertion.


The following code

<br>Hello, <span id="person" style="color:red;">Wiggum. How's it going?</span>
<script> new Insertion.Bottom('person', " What's up?"); </script>
Will change the HTML to

<br>Hello, <span id="person" style="color:red;">Wiggum. How's it going? What's up?</span>

The Insertion.After class
Inherits from Abstract.Insertion

在给定元素结束标记的后面插入HTML。


Method Kind Arguments Description
[ctor](element, content) constructor element: element object or id, content: HTML to be inserted Inherited from Abstract.Insertion. Creates an object that will help with dynamic content insertion.


The following code

<br>Hello, <span id="person" style="color:red;">Wiggum. How's it going?</span>
<script> new Insertion.After('person', ' Are you there?'); </script>
Will change the HTML to

<br>Hello, <span id="person" style="color:red;">Wiggum. How's it going?</span> Are you there?

The Field object
这个对象提供操作表单中的输入项目的功能性方法。


Method Kind Arguments Description
clear(field1 [, field2 [, field3 [...]]]) instance fieldN: field element object or id  清除传入表单中项目元素的值。
present(field1 [, field2 [, field3 [...]]]) instance fieldN: field element object or id  只有在所有的表单项目都不为空时返回 true 。
focus(field) instance field: field element object or id 移动焦点到给定的表单项目。
select(field) instance field: field element object or id 选择支持项目值选择的表单项目的值。
activate(field) instance field: field element object or id 移动焦点并且选择支持项目值选择的表单项目的值。

The Form object
这个对象提供操作表单和他们的输入元素的功能性方法。


Method Kind Arguments Description
serialize(form) instance form: form element object or id 返回url参数格式的项目名和值的列表, 如'field1=value1&field2=value2&field3=value3'。
findFirstElement(form) instance form: form element object or id 返回Form中第一个Enable的对象。
getElements(form) instance form: form element object or id 返回包含所有在表单中输入项目的 Array 对象。
getInputs(form [, typeName [, name]]) instance form: form element object or id, typeName: the type of the input element, name: the name of the input element. 返回一个 Array 包含所有在表单中的 <input> 元素。 另外, 这个列表可以对元素的类型或名字属性进行过滤。
disable(form) instance form: form element object or id 使表单中的所有输入项目无效。
enable(form) instance form: form element object or id 使表单中的所有输入项目有效。
focusFirstElement(form) instance form: form element object or id 激活第一个表单中可视的,有效的输入项目。
reset(form) instance form: form element object or id 重置表单。和调用表单对象的 reset() 方法一样。

The Form.Element object
这个对象提供表单对象中的可视和非可视元素的功能性方法。


Method Kind Arguments Description
serialize(element) instance element: element object or id 返回元素的 名称=值 对, 如 'elementName=elementValue'。
getValue(element) instance element: element object or id 返回元素的值。

The Form.Element.Serializers object
这个对象提供了内部使用的用来协助解析出表单元素的当前值的一些有用的方法。


Method Kind Arguments Description
inputSelector(element) instance element: object or id of a form element that has the checked property, like a radio button or checkbox. 返回带有元素名称和值的 Array , 如 ['elementName', 'elementValue']
textarea(element) instance element: object or id of a form element that has the value property, like a textbox, button or password field. 返回带有元素名称和值的 Array , 如 ['elementName', 'elementValue']
select(element) instance element: object of a <select> element 返回带有元素名称和所有被选择的选项的值或文本的 Array , 如 ['elementName', 'selOpt1 selOpt4 selOpt9']

The Abstract.TimedObserver class
这个类是用于其它监听一个元素的值(或者任何类中涉及的属性)变化的类的基类,这个类像一个抽象类一样被使用。

子类可以被创建来监听如输入项目值,或style属性,或表格的行数,或者其他任何对跟踪变化相关的东西。

子类必须实现这个方法来决定什么才是被监听的元素的当前值。

Method Kind Arguments Description
[ctor](element, frequency, callback) constructor element: element object or id, frequency: interval in seconds, callback: function to be called when the element changes 创建一个监听元素的对象。
getValue() instance, abstract (none) 子类必须实现这个方法以瘊定什么这个元素被监视的当前值。
registerCallback() instance (none) 这个方法通常不会被外部调用。 被这个对象自己调用来开始监听那个元素。 
onTimerEvent() instance (none) 这个方法通常不会被外部调用。 被这个对象自己调用来周期性的检查那个元素。 

Property Type Description
element Object 被监听的元素对象。
frequency Number 每次检查中的以秒为单位的时间间隔。
callback Function(Object, String) 只要元素改变这个方法就会被调用。 会接收到元素对象和新值作为参数。
lastValue String 元素被核实的最后一个值。

The Form.Element.Observer class
继承自 Abstract.TimedObserver

Abstract.TimedObserver 的一个实现类用来监听表单输入项目的值的变化。当你想监听一个没有带报告值变化事件的元素的时候使用这个类。否则的话使用 Form.Element.EventObserver 类代替。


Method Kind Arguments Description
[ctor](element, frequency, callback) constructor element: element object or id, frequency: interval in seconds, callback: function to be called when the element changes 继承自 Abstract.TimedObserver. 创建一个监听元素值属性的对象。
getValue() instance (none) 返回元素的值。

The Form.Observer class
继承自 Abstract.TimedObserver

Abstract.TimedObserver 的一个实现类用来监听表单中任何数据项的值的变化。当你想监听一个没有带报告值变化事件的元素的时候使用这个类。 否则的话使用类Form.EventObserver 代替。


Method Kind Arguments Description
[ctor](form, frequency, callback) constructor form: form object or id, frequency: interval in seconds, callback function to be called when any data entry element in the form changes 继承自 Abstract.TimedObserver. 创建一个监听表单变化的对象。
getValue() instance (none) 返回所有表单数据的一系列值。

The Abstract.EventObserver class
这个类被用作其他一些类的基类,这些类具有在一个元素的值改变事件发生的时候执行一个回调方法这样的功能。

类 Abstract.EventObserver 的多个对象可以绑定到一个元素上,不是一个帮其他的擦出了,而是按照他们付给元素的顺序执行这些回调方法。

单选按钮和复选框的触发事件是 onclick ,而文本框和下拉列表框/下拉列表框的是 onchange 。 


Method Kind Arguments Description
[ctor](element, callback) constructor element: element object or id, callback: function to be called when the event happens 创建监听元素的对象。
getValue() instance,abstract (none) 子类必须实现这个方法以瘊定什么这个元素被监视的当前值。
registerCallback() instance (none) 这个方法通常不会被外部调用。 被对象调用来把自己绑定到元素的事件上。 
registerFormCallbacks() instance (none) 这个方法通常不会被外部调用。 被对象调用来把自己绑定到表单中的每一个数据项元素的事件上。 
onElementEvent() instance (none) 这个方法通常不会被外部调用。 将被绑定到元素的事件上。 

Property Type Description
element Object 被监听的元素对象。
callback Function(Object, String) 只要元素改变就调用的方法。会接收到元素对象和新值作为参数。
lastValue String 元素被核实的最后一个值。

The Form.Element.EventObserver class
继承自 Abstract.EventObserver

Abstract.EventObserver 的一个实现类,它在监测到表单中数据项元素的值改变的相应事件时候执行一个回调方法。 如果元素没有任何报告变化的事件,那么你可以使用 Form.Element.Observer 类代替。


Method Kind Arguments Description
[ctor](element, callback) constructor element: element object or id, callback: function to be called when the event happens 继承自 Abstract.EventObserver。 创建一个监听元素值属性的对象。
getValue() instance (none) 返回元素的值。

The Form.EventObserver class
继承自 Abstract.EventObserver

Abstract.EventObserver 的一个实现类,监听表单对象中包含的任何对象的任何变化,用元素的事件检测值的变化。如果元素没有任何报告变化的事件, 那么你可以使用Form.Observer 类代替。

Method Kind Arguments Description
[ctor](form, callback) constructor form: form object or id, callback: function to be called when any data entry element in the form changes 继承自 Abstract.EventObserver。 创建一个监听元素值属性的对象。
getValue() instance (none) 返回所有表单数据的一系列值。

Position 对象 (预备文档)
这个对象提供许多和元素位置相关的方法。


Method Kind Arguments Description
prepare() instance (none) 调整 deltaX 和 deltaY 属性来协调在滚动位置中的变化。 记得在页面滚动之后的任何调用的withinIncludingScrolloffset 之前调用这个方法。
realOffset(element) instance element: object 返回这个元素的正确滚动偏差的 Array 对象, 包括所有影响元素的滚动偏差。结果数组类似 [total_scroll_left, total_scroll_top]
cumulativeOffset(element) instance element: object 回这个元素的正确滚动偏差的 Array 对象, 包含任何被放置的父元素强加偏差。结果数组类似 [total_offset_left, total_offset_top]
within(element, x, y) instance element: object, x and y: coordinates of a point 测试给定的点的坐标是否在给定的元素的外部矩形范围之内。
withinIncludingScrolloffsets(element, x, y) instance element: object, x and y: coordinates of a point  测试给定的点的坐标是否在给定的元素的外部矩形范围之内(包含scroll offsets)。
overlap(mode, element) instance mode: 'vertical' or 'horizontal', element: object 在调用这个方法之前需要调用within() 。这个方法返回0.0到1.0之间的数字,来表示坐标在元素重叠的分数。 举个例子,如果元素是一个边长是100px的正方形的DIV,并且位于(300, 300), 然后 within(divSquare, 330, 330);overlap('vertical', divSquare); 会返回 0.10,意思是那个点位于DIV顶部边框以下 10% (30px) 的位置上。 
clone(source, target) instance source: element object or id, target: element object or id 改变目标元素的大小尺寸和位置与源元素的相同。


作者地址:http://www.cnblogs.com/thinhunan/archive/2006/04/01/DeveloperNotesForPrototype.html

理解 Comet

您可能已经听说过 Comet,因为它最近受到了一定的关注。Comet 有时也称反向 Ajax 或服务器端推技术(server-side push)。其思想很简单:将数据直接从服务器推到浏览器,而不必等到浏览器请求数据。听起来简单,但是如果熟悉 Web 应用程序,尤其是 HTTP 协议,那么您就会知道,这绝不简单。实现 Comet 风格的 Web 应用程序,同时保证在浏览器和服务器上的可伸缩性,这只是在最近几年才成为可能。目前一些主流网站都有类似的原理,例如:webQQ、开心网、白社会等等,它们中消息动态都是采用类似的技术,也许具体实现方式不一样;

使用 Comet 的动机

HTTP 协议的成功毋庸置疑。它是 Internet 上大部分信息交换的基础。然而,它也有一些局限性。特别是,它是无状态、单向的协议。请求被发送到 Web 服务器,服务器处理请求并发回一个响应 — 仅此而已。请求必须由客户机发出,而服务器则只能在对请求的响应中发送数据。这至少会影响很多类型的 Web 应用程序的实用性。典型的例子就是聊天程序。另外还有一些例子,例如比赛的比分、股票行情或电子邮件程序。

HTTP 的这些局限性也是它取得一定成功的原因。请求/响应周期使它成为了经典的模型,即每个连接使用一个线程。只要能够快速为请求提供服务,这种方法就有巨大的可伸缩性。每秒钟可以处理大量的请求,只需使用少量的服务器就可以处理很大数量的用户。对于很多经典的 Web 应用程序,例如内容管理系统、搜索应用程序和电子商务站点等等而言,这非常适合。在以上任何一种 Web 应用程序中,服务器提供用户请求的数据,然后关闭连接,并释放那个线程,使之可以为其他请求服务。如果提供初始数据之后仍可能存在交互,那么将连接保持为打开状态,因此线程就不能释放出来,服务器也就不能为很多用户服务。

但是,如果想在对请求做出响应并发送初始数据之后,仍然保持与用户的交互呢?在 Web 早期,这一点常使用 meta 刷新实现。这将自动指示浏览器在指定秒数之后重新装载页面,从而支持简陋的轮询(polling)。这不仅是一种糟糕的用户体验,而且通常效率非常低下。如果没有新的数据要显示在页面上呢?这时不得不重新呈现同样的页面。如果对页面的更改很少,并且页面的大部分没有变化呢?同样,不管是否有必要,都得重新请求和获取页面上的一切内容。

Ajax 的发明和流行改变了上述状况。现在,服务器可以异步通信,因此不必重新请求整个页面。现在可以进行增量式的更新。只需使用 XMLHttpRequest 轮询服务器。这项技术通常被称作 Comet。这项技术存在一些变体,每种变体具有不同的性能和可伸缩性。我们来看看这些不同风格的 Comet。

Comet 风格

Ajax 的出现使 Comet 成为可能。HTTP 的单向性质可以有效地加以规避。实际上有一些不同的方法可以绕过这一点。您可能已经猜到,支持 Comet 的最容易的方式是轮询(poll)。使用 XMLHttpRequest 向服务器发出调用,返回后,等待一段固定的时间(通常使用 JavaScript 的 setTimeout 函数),然后再次调用。这是一项非常常见的技术。例如,大多数 webmail 应用程序就是通过这种技术在电子邮件到达时显示电子邮件的。

这项技术有优点也有缺点。在这种情况下,您期望快速返回响应,就像任何其他 Ajax 请求一样。在请求之间必须有一段暂停。否则,连续不断的请求会冲垮服务器,并且这种情况下显然不具有可伸缩性。这段暂停使应用程序产生一个延时。暂停的时间越长,服务器上的新数据就需要越多的时间才能到达客户机。如果缩短暂停时间,又将重新面临冲垮服务器的风险。但是另一方面,这显然是最简单的实现 Comet 的方式。

现在应该指出,很多人认为轮询并不属于 Comet。相反,他们认为 Comet 是对轮询的局限性的一个解决方案。最常见的 “真正的” Comet 技术是轮询的一种变体,即长轮询(long polling)。轮询与长轮询之间的主要区别在于服务器花多长的时间作出响应。长轮询通常将连接保持一段较长的时间 — 通常是数秒钟,但是也可能是一分钟甚至更长。当服务器上发生某个事件时,响应被发送并随即关闭,轮询立即重新开始。

长轮询相对于一般轮询的优点在于,数据一旦可用,便立即从服务器发送到客户机。请求可能等待较长的时间,期间没有任何数据返回,但是一旦有了新的数据,它将立即被发送到客户机。因此没有延时。如果您使用过基于 Web 的聊天程序,或者声称 “实时” 的任何程序,那么它很可能就是使用了这种技术。

长轮询有一种变体,这是第三种风格的 Comet。这通常被称为流(streaming)。按照这种风格,服务器将数据推回客户机,但是不关闭连接。连接将一直保持开启,直到过期,并导致重新发出请求。XMLHttpRequest 规范表明,可以检查 readyState 的值是否为 3 或 Receiving(而不是 4 或 Loaded),并获取正从服务器 “流出” 的数据。和长轮询一样,这种方式也没有延时。当服务器上的数据就绪时,该数据被发送到客户机。这种方式的另一个优点是可以大大减少发送到服务器的请求,从而避免了与设置服务器连接相关的开销和延时。不幸的是,XMLHttpRequest 在不同的浏览器中有很多不同的实现。这项技术只能在较新版本的 Mozilla Firefox 中可靠地使用。对于 Internet Explorer 或 Safari,仍需使用长轮询。

至此,您可能会想,长轮询和流都有一个很大的问题。请求需要在服务器上存在一段较长的时间。这打破了每个请求使用一个线程的模型,因为用于一个请求的线程一直没有被释放。更糟糕的是,除非要发回数据,否则该线程一直处于空闲状态。这显然不具有可伸缩性。幸运的是,现代 Java Web 服务器有很多方式可以解决这个问题。搞JAVA开发的程序员,相对而言比较幸运,PHP目前还不是很多的;我今天花了一天的时间,找了各方面的资料,共享一个国外的author写的demo附件;有兴趣的朋友可以研究一下,研究出更好的“服务器推”方案;

附件见原帖:http://bbs.phpchina.com/viewthread.php?tid=166038

10种平价美食 吃出水润光泽肌肤

[不指定 2010年12月15日 16:54 | by gaoolp ]
1.葡萄抗氧化.葡萄中富含丰富的维生素、矿物质和类黄酮。类黄酮是一种强力抗氧化剂,可抗衰老,并可清除体内自由基。
  温馨提示:葡萄的一大部分营养来自葡萄皮,连皮吃对女性最好。
+ C! |& b( g' `' N1 R2.番茄延缓衰老.番茄生吃能补充维生素c。煮熟后食用,所含的番茄红素和其他抗氧化剂含量会显著上升,起到降低心脏病的风险和抗衰老的作用。* }1 }0 o2 E" @: M2 W
3.茶叶防辐射.茶中含有的茶多酚,具有很强的抗氧化性和生理活性,是人体自由基的清除剂,可以阻断亚硝酸胺等多种致癌物质在体内合成。它还能吸收放射性 物质达到防辐射的效果,从而保护女性皮肤。用茶叶洗脸,还能清除面部的油腻、收敛毛孔、减缓皮肤老化。
   温馨提示:睡眠不好、胃肠功能较差的人慎用.
5 A6 E& T; |! U% {4 Q/ w5 |4.姜减少色素沉淀. 姜含有丰富蛋白质、多种维生素、胡萝卜素、钙、铁、磷等。姜中所含的姜辣素进入体内后,有很强的抗氧化效果,可防止或减少脂褐素的沉积,预防老年斑。姜还能抑制癌细胞活性。喝姜茶还能治疗轻微感冒。
   温馨提示:不可一次食用过多。
& G8 L+ Q7 o5 t/ v( K5.醋增强皮肤活力. 醋酸及柠檬酸则能渗透食物,有很强的杀菌能力。醋含较高氨基酸,有助抑制人体老化,预防各种老年疾病。用加醋的水洗脸或洗澡,能起到松软皮肤、增强皮肤活力的作用。, n: S6 s5 S' z
  温馨提示:过敏者和低血压者慎用。
6.黄豆调理雌激素. 黄豆主要成分是蛋白质,尤其是素食者的蛋白质来源。它们包含了人体所必需的氨基酸,对肌肉的修复和再生,皮肤、头发、指甲的生长都 有好处。英国研究发现,黄豆中含有的雌性激素,在治疗和预防乳癌方面扮演重要角色。每天食用1杯牛奶和500克鱼,长期坚持,能起到调理雌激素平衡的作 用。+ {3 V  Q5 y5 u& N8 Q5 J; _/ K" V
  温馨提示:一次吃太多不好消化,甚至会引起腹泻。  u# Z& L3 c& _5 C+ e
7.米饭防止肌肤干燥.米中富含的维生素a、e和b族维生素、氨基酸和盐酸,能有效防止肌肤干燥,防止肌肤衰老,同时能抵抗色素沉着。 大米也是b族维生素的主要来源,是预防脚气病、消除口腔炎症的重要食物。米汤能刺激胃液的分泌,有助于消化,并对脂肪的吸收有促进作用。
7 Q$ D7 s; d% n0 j) O  温馨提示:不好消化,不宜多吃。
8.菌类调节免疫系统.高蛋白、无胆固醇、无淀粉、低脂肪、低糖、多膳食纤维……食用菌集中了食品的一切良好特性,具有增强免疫力、抗辐射、抗衰老等功 效。 蘑菇里含有的硒,是女人的“美容圣品”,可以促进皮肤新陈代谢和抗衰老,预防皱纹产生。美国自然疗法医学专家杰西卡·布莱克指出,蘑菇是强有力的免 疫系统刺激物和免疫系统调节器。
2 n! @: O9 @+ _" S& W9 z+ E' U, i  温馨提示:仔细分辨菌类是否有毒。  I" Y8 ?" L% R1 N5 n1 o
9.红酒提升气色. 红葡萄酒含有200多种对人体有益的营养成分,糖、有机酸、氨基酸、维生素、多酚、无机盐等对人体非常有益。  酒中含有的抗氧化成分,可抗癌、抗衰老及预防血小板凝结成血管阻塞。手脚冰冷的女性,可以用红酒促进血液流通,让整个人的气色好起来。对有轻微贫血的女 性,红酒可养气活血、养颜美容,使皮肤变得有弹性。
/ w$ z' D1 w1 p' c7 z  温馨提示:每天一杯即可。
10. 燕麦减少脂肪. 燕麦中水溶性膳食纤维分别是小麦和玉米的4.7倍和7.7倍。燕麦中的b族维生素、尼克酸、叶酸、泛酸都比较丰富,特别是维生素e,每100克燕麦粉中高达15毫克。4 S9 s( M! `8 l* V
  燕麦中富含可溶性纤维和不溶性纤维,能大量吸收人体内的胆固醇并排出体外,减去体内多余的脂肪。燕麦中含有极其丰富的亚油酸,能延缓衰老,对脂肪肝、糖尿病、浮肿、便秘等也有辅助疗效。
0 d- ^. J5 \( w! |- Q6 K# S  温馨提示:生燕麦不易消化。
  世界巨恶心笑话排名(之一)
  有人很喜欢“麻辣粉丝煲”这道菜。有一次,他上饭馆,又点了这道菜。但侍者告诉他,这道菜已经卖完了。“真的 卖完了吗?”他很失望地问。“先生,真的卖完了。你瞧,最后一份卖给那桌的先生了。”侍者回答道。那人顺着侍者的指点,看见有个很体面的绅士坐在邻座。绅 士的饭菜已经吃得差不多了,但那份“麻辣粉丝煲”居然还是满满的。那人觉得绅士很浪费美味,所以他走到绅士旁边,指着那份“麻辣粉丝煲”,很有礼貌地问: “先生,您这还要吗?”绅士很有风度地摇摇头。于是那人立刻坐下,拿起调羹狼吞虎咽起来。
       风卷残云,一会儿一半下肚了,突然间他发现在砂锅底躺着一只很小很小但皮毛已长全的小老鼠。一阵恶心,那人把吃下去的所有粉丝通通吐回了砂锅里。当他在那儿翻胃不已的时候,那绅士用很同情的眼光看着他,说:“很恶心是吗?刚才我也是这样……”
  世界巨恶心笑话排名(之二)
       《乞   讨》
        这天,酒店老板正在大厅巡视。来了一乞丐上前说道:”  老板给个牙签行吗?”老板给他一个打发走了。一会儿,又来一个乞丐,也是来要牙签的。老板心想现在这乞丐怎么不要饭改要牙签了?也同样给他一个打发走了, 没过多旧,又来一个乞丐。老板对他说:” 你也是来要牙签的吗?”  乞丐说:”有个人吐了,可我晚了一步,已经被前面两个乞丐把能吃的都吃了,现在只剩下汤了。你能给我个吸管吗?
  世界巨恶心笑话排名(之三)
  《呕   吐》
       老大、老二乘坐飞机,老二晕机,不停呕吐。一袋吐满,老大只好去取袋子,等他回来时,发觉全机人都在不停呕吐。老大问其原因,老二说:“我看到这只袋子也吐满了,只好又喝进去了半袋,结果他们就全吐了。”
  世界巨恶心笑话排名(之四)
       《节约粮食》
       偶小时侯吃饭不老实, 一老农为了教育我, 对我说:六零年苦呀, 没饭吃, 抠出来的鼻屎从来不扔的.
  世界巨恶心笑话排名(之五)
  《买东西》
        一个男子看见一家商店大减价,便走了进去。“您买些什么?” “我想买狗食。”“我们有规定,您必须证明您有狗。”“哪儿有这样的规定?”  “减价商品就是这样。”男子与售货员磨了半天,售货员还是不同意卖给他。没有办法,男子只好回家把狗带来,才买到了狗食。
       过了几天,男子又去这家商店买猫食。“给我两盒猫食。” “我们有规定,您必须证明您有猫。”还是那个售货员,男子又与她磨蹭了半天,结果还是不得不回家把猫带来才买到了猫食。
       又过了几天,男子抱着挖有一个洞的大纸箱来到那家商店,找到那个售货员。“您买些什么?” “你把手伸进去就知道啦。”售货员把手伸了进去: “是什么呀,粘乎乎的。”“我想买两卷儿手纸。
  世界巨恶心笑话排名(之六)
       《喝   痰》
  老大和老二去戏院看戏,看到中途二人为情节发展而争执起来,并为此打赌。
         老大指着前边摆的一排痰盂说:“输的人要喝一口那里边的东西。”不幸,老大输了,于是老大皱着眉头喝了一口。二人接着赌下边的情节,这次,老二输了。只见 老二抱起一个痰盂,咕咚咕咚连喝了十五大口。老大大惊失色,佩服的五体投地,对老二说“你太了不起了,居然能连喝十五大口!”老二摇摇头,“不是我想喝, 那个痰盂里的痰太浓,我实在咬不断!”
  世界巨恶心笑话排名(之七)
       《巧克力》  有个人去带著朋友去探望他的外婆。当他和外婆说话时,他的朋友开始吃著咖啡桌上放的花生,把花生都吃完了。当他们离开时,他的朋友对外婆说:「谢谢您的花 生」外婆回应说:「喔!嗯!唉!自从我牙齿掉光后,我就只能吸掉它们外层的巧克力而已。老了,咳咳。。。。
  世界巨恶心笑话排名(之八)
       《手   纸》 有个富豪找佣人,面试的题目是上厕所,前几个上完后都没有洗手就出来了,富豪因此把他们打发走了,只有一个洗了手,于是富豪留下了他.可是有一天,富豪却发现他没有洗手就出来了,富豪问他是为什么?佣人答到:“偶今天带了手纸...
  世界巨恶心笑话排名(之九)
        《猪血糕的故事》  有一个年轻人特别喜欢吃猪血糕,有一次逛街,发现一个老太太在街头卖猪血糕,便买了一份,吃完之后感觉和以前吃的猪血糕都不太一样,便返回去,找那个老太 太要再买一份,可是哪个老太太说卖完了,年轻人问为什么这么少,老太太答道:一个月才来一次吗,以前还挺多的,现在老了,就更少了!!!!!!!
   世界巨恶心笑话排名(之十)
        《烫粉的故事》  有一个卖烫粉的排档,因为味道不错一直都客源不断。有天晚上一位客人来买烫粉吃,在等的过程中,这位老兄嗓子突然觉得不舒服,咳了几下一口浓痰就吐了出 来,正在这时老板将装骨头汤的锅盖掀开准备勺汤出来,这口痰就正好吐在了锅里。两人对视了一下,都没有出声。随后有位农民模样的人也来买烫粉吃,当他看到 骨头汤里浮着的那口浓痰时,就对老板说,老板我们平时油水不足,麻烦把汤里的那块浮油给我好吗?谢谢了!那老板还是没说什么,只是很快的把那口浓痰勺到了 他的烫粉里。。。
分页: 6/63 第一页 上页 1 2 3 4 5 6 7 8 9 10 下页 最后页 欢迎光临高一鹏的博客! [ 显示模式: 摘要 | 列表 ]