﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-JAVA流通桥-文章分类-JavaScript文章</title><link>http://www.blogjava.net/zhuyan/category/20908.html</link><description>JAVA启发者</description><language>zh-cn</language><lastBuildDate>Fri, 27 Jul 2007 15:30:51 GMT</lastBuildDate><pubDate>Fri, 27 Jul 2007 15:30:51 GMT</pubDate><ttl>60</ttl><item><title>jQuery中文入门指南</title><link>http://www.blogjava.net/zhuyan/articles/132685.html</link><dc:creator>朱岩</dc:creator><author>朱岩</author><pubDate>Fri, 27 Jul 2007 01:25:00 GMT</pubDate><guid>http://www.blogjava.net/zhuyan/articles/132685.html</guid><wfw:comment>http://www.blogjava.net/zhuyan/comments/132685.html</wfw:comment><comments>http://www.blogjava.net/zhuyan/articles/132685.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhuyan/comments/commentRss/132685.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhuyan/services/trackbacks/132685.html</trackback:ping><description><![CDATA[<h1>jQuery中文入门指南，翻译加实例，jQuery的起点教程</h1>
<div>
<h3>中文版译者：<a href="http://keelsike.blogspot.com/"><u><font color=#0000ff>Keel</font></u></a></h3>
<p>此文以实例为基础一步步说明了jQuery的工作方式。现以中文翻译（添加我的补充说明）如下。如有相关意见或建议请麻烦到我的 <a href="http://keelsike.blogspot.com/"><u><font color=#0000ff>BLOG</font></u></a> 写个回复或者 <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#107;&#101;&#101;&#108;&#46;&#115;&#105;&#107;&#101;&#40;&#97;&#116;&#41;&#103;&#109;&#97;&#105;&#108;&#46;&#99;&#111;&#109;"><u><font color=#0000ff>EMAIL</font></u></a> 告知。</p>
<p>英文原版：<a href="http://jquery.bassistance.de/jquery-getting-started.html"><u><font color=#0000ff>http://jquery.bassistance.de/jquery-getting-started.html</font></u></a> ，感谢原文作者 <a href="http://bassistance.de/"><u><font color=#0000ff>J&#246;rn Zaefferer</font></u></a></p>
<p><strong>本文发布已征求原作者同意。</strong> </p>
<p>另外我认为在学习过程中,有两个API文档你要打开随时查看:</p>
<ul>
    <li><a href="http://jquery.com/api/"><u><font color=#800080>http://jquery.com/api/</font></u></a>
    <li><a href="http://jquery.com/api/"><u><font color=#800080>http://visualjquery.com/</font></u></a> </li>
</ul>
</div>
<h4>以下部分为原文翻译:</h4>
<hr>
<div>
<h2>jQuery入门指南教程</h2>
<p>这个指南是一个对jQuery库的说明，要求读者了解HTML(DOM)和CSS的一些常识。它包括了一个简单的Hello World的例子，选择器和事件基础，AJAX、FX的用法，以及如何制作jQuery的插件。 这个指南包括了很多代码，你可以copy它们，并试着修改它们，看看产生的效果。 </p>
<h2>内容提要</h2>
<ol>
    <li><a href="http://keel.sike.googlepages.com/jQuery_getting_started.html#setup"><u><font color=#800080>安装</font></u></a>
    <li><a href="http://keel.sike.googlepages.com/jQuery_getting_started.html#hello"><u><font color=#800080>Hello jQuery</font></u></a>
    <li><a href="http://keel.sike.googlepages.com/jQuery_getting_started.html#find"><u><font color=#800080>Find me:使用选择器和事件</font></u></a>
    <li><a href="http://keel.sike.googlepages.com/jQuery_getting_started.html#rate"><u><font color=#800080>Rate me:使用AJAX</font></u></a>
    <li><a href="http://keel.sike.googlepages.com/jQuery_getting_started.html#"><u><font color=#800080>Animate me(让我生动起来):使用FX</font></u></a>
    <li><a href="http://keel.sike.googlepages.com/jQuery_getting_started.html#sort"><u><font color=#800080>Sort me(将我有序化):使用tablesorter插件(表格排序)</font></u></a>
    <li><a href="http://keel.sike.googlepages.com/jQuery_getting_started.html#plug"><u><font color=#800080>Plug me:制作您自己的插件</font></u></a>
    <li><a href="http://keel.sike.googlepages.com/jQuery_getting_started.html#next"><u><font color=#800080>Next steps(下一步)</font></u></a> </li>
</ol>
</div>
<div>
<h2 id=setup>安装</h2>
<p>一开始,我们需要一个jQuery的库,最新的下载可以到<a href="http://jquery.com/src/"><u><font color=#0000ff>这里</font></u></a>找到。这个指南提供一个基本包含实例的包供下载.</p>
<p>下载：<a class=download href="http://keel.sike.googlepages.com/jquery-starterkit.zip"><u><font color=#0000ff>jQuery Starterkit</font></u></a></p>
<p class=log>(译者Keel注:一定要下载这个包，光看文章不实践肯定是不行的。) </p>
<p class=instruction>下载后解压缩，然后用你最喜欢的文本编辑器打开starterkit.html和custom.js这两个文件。<span class=log><font color=#008000>(译者Keel注:这两个就是例子文件,所有的例子都用这两个例子作出,custom.js写jQuery代码,starterkit.html观察效果.建议用editPlus打开) </font></span></p>
<p>现在,我们就已经做好了一切准备来进行这个著名的"Hello world"例子.</p>
<h4>本章的相关链接:</h4>
<ul>
    <li><a href="http://keel.sike.googlepages.com/jquery-starterkit.zip"><u><font color=#0000ff>Starterkit</font></u></a>
    <li><a href="http://jquery.com/src/"><u><font color=#0000ff>jQuery Downloads</font></u></a> </li>
</ul>
</div>
<div>
<h2 id=hello>Hello jQuery</h2>
<p>在做所有事情之前,我们要让jQuery读取和处理文档的DOM,必须尽可能快地在DOM载入后开始执行事件,所以,我们用一个ready事件作为处理HTML文档的开始.看看我们打开的custom.js这个文件,里面已经准备好了:</p>
<pre>$(document).ready(function() {
// do stuff when DOM is ready
});</pre>
<p>放一个简单的alert事件在需要等DOM完成载入,所以我们把任务稍稍变复杂一点:在点击任何一个链接时显示一个alert.</p>
<pre>$(document).ready(function() {
$("a").click(function() {
alert("Hello world!");
});
});</pre>
<p>这样在你点击页面的一个链接时都会触发这个"Hello world"的提示。</p>
<p class=log>(译者Keel注:请照此代码修改custom.js并保存,然后用浏览器打开starterkit.html观察效果。)</p>
<p>让我们看一下这些修改是什么含义。$("a") 是一个jQuery选择器(selector),在这里，它选择所有的a标签<span class=log><font color=#008000>（译者Keel注：即&lt;a&gt;&lt;/a&gt;）</font></span>，$号是 jQuery &#8220;类&#8221;(jQuery "class")的一个别称，因此$()构造了一个新的jQuery 对象(jQuery object)。函数 click() 是这个jQuery对象的一个方法，它绑定了一个单击事件到所有选中的标签(这里是所有的a标签),并在事件触发时执行了它所提供的alert方法.</p>
<p>这里有一个拟行相似功能的代码:</p>
<pre>&lt;a href="#" onclick="alert('Hello world')"&gt;Link&lt;/a&gt;</pre>
<p>不同之处很明显,用jQuery不需要在每个a标签上写onclick事件,所以我们拥有了一个整洁的结构文档(HTML)和一个行为文档(JS),达到了将结构与行为分开的目的,就像我们使用CSS追求的一样.</p>
<p>下面我们会更多地了解到选择器与事件.</p>
<h4>本章的相关链接:</h4>
<ul>
    <li><a href="http://jquery.com/docs/Base/"><u><font color=#0000ff>jQuery Base</font></u></a>
    <li><a href="http://jquery.com/docs/Base/Expression/"><u><font color=#0000ff>jQuery Expressions</font></u></a>
    <li><a href="http://jquery.com/docs/Base/Events/"><u><font color=#0000ff>jQuery Basic Events</font></u></a> </li>
</ul>
</div>
<div>
<h2 id=find>Find me:使用选择器和事件</h2>
<p>jQuery提供两种方式来选择html的elements，第一种是用CSS和Xpath选择器联合起来形成一个字符串来传送到jQuery的构造器（如：$("div &gt; ul a")）；第二种是用jQuery对象的几个methods(方法)。这两种方式还可以联合起来混合使用。</p>
<p>为了测试一下这些选择器，我们来试着在我们starterkit.html中选择并修改第一个ordered list.</p>
<p>一开始，我们需要选择这个list本身，这个list有一个ID叫&#8220;orderedlist&#8221;，通常的javascript写法是document.getElementById("orderedlist").在jQuery中，我们这样做：</p>
<pre>$(document).ready(function() {
$("#orderedlist").addClass("red");
});</pre>
<p>这里将starterkit中的一个CSS样式red附加到了orderedlist上<span class=log><font color=#008000>(译者Keel注：参考测试包中的css目录下的core.css，其中定义了red样式)</font></span>。因此，在你刷新了starterkit.html后，你将会看到第一个有序列表(ordered list )背景色变成了红色，而第二个有序列表没有变化.</p>
<p>现在，让我们添加一些新的样式到list的子节点.</p>
<pre>$(document).ready(function() {
$("#orderedlist &gt; li").addClass("blue");
});</pre>
<p>这样，所有orderedlist中的li都附加了样式"blue"。</p>
<p>现在我们再做个复杂一点的，当把鼠标放在li对象上面和移开时进行样式切换，但只在list的最后一个element上生效。</p>
<pre>$(document).ready(function() {
$("#orderedlist li:last").hover(function() {
$(this).addClass("green");
}, function() {
$(this).removeClass("green");
});
});</pre>
<p>还有大量的类似的<a class=doc title="Documentation for CSS selectors" href="http://jquery.com/docs/Base/Expression/CSS/"><u><font color=#0000ff>CSS</font></u></a>和<a class=doc title="Documentation for XPath selectors" href="http://jquery.com/docs/Base/Expression/XPath/"><u><font color=#0000ff>XPath</font></u></a>例子，更多的例子和列表可以在<a class=doc title="Documentation for base selectors" href="http://jquery.com/docs/Base/Expression/"><u><font color=#0000ff>这里</font></u></a>找到。<span class=log><font color=#008000>（译者Keel注：入门看此文，修行在个人，要想在入门之后懂更多，所以这段话的几个链接迟早是要必看的！不会又要翻译吧...^_^!）</font></span></p>
<p>每一个onXXX事件都有效，如onclick,onchange,onsubmit等，都有jQuery等价表示方法<span class=log><font color=#008000>（译者Keel注：jQuery不喜欢onXXX，所以都改成了XXX，去掉了on）</font></span>。<a class=doc title="Documentation for advanced events" href="http://jquery.com/docs/EventModule/"><u><font color=#0000ff>其他的一些事件</font></u></a>，如ready和hover,也提供了相应的方法。</p>
<p>你可以在<a href="http://visualjquery.com/"><u><font color=#0000ff>Visual jQuery</font></u></a>找到全部的事件列表，在Events栏目下.</p>
<p>用这些选择器和事件你已经可以做很多的事情了，但这里有一个更强的好东东！</p>
<pre>$(document).ready(function() {
$("#orderedlist").find("li").each(function(i) {
$(this).html( $(this).html() + " BAM! " + i );
});
});</pre>
<p>find() 让你在已经选择的element中作条件查找,因此 $("#orderedlist).find("li") 就像 $("#orderedlist li"). each()一样迭代了所有的li，并可以在此基础上作更多的处理。 大部分的方法,如addClass(), 都可以用它们自己的 each() 。在这个例子中, html()用来获取每个li的html文本, 追加一些文字，并将之设置为li的html文本。<span class=log><font color=#008000>（译者Keel注：从这个例子可以看到.html()方法是获取对象的html代码，而.html('xxx')是设置'xxx'为对象的html代码）</font></span></p>
<p>另一个经常碰到的任务是在没有被jQuery覆盖的DOM元素上call一些方法，想像一个在你用AJAX方式成功提交后的reset：</p>
<pre>$(document).ready(function() {
// use this to reset a single form
$("#reset").click(function() {
$("#form")[0].reset();
});
});</pre>
<p class=log>（译者Keel注：这里作者将form的id也写成了form，源文件有&lt;form id="form"&gt;，这是非常不好的写法，你可以将这个ID改成form1或者testForm，然后用$("#form1")或者$("#testForm")来表示它，再进行测试。）</p>
<p>这个代码选择了所有ID为"form"的元素，并在其第一个上call了一个reset()。如果你有一个以上的form，你可以这样做：</p>
<pre>$(document).ready(function() {
// use this to reset several forms at once
$("#reset").click(function() {
$("form").each(function() {
this.reset();
});
});
});</pre>
<p class=log>（译者Keel注：请注意一定要亲自将这些代码写在custom.js中并在starterkit.html上测试效果才能有所体会！必要时要观察starterkit.html的html代码）</p>
<p>这样你在点击Reset链接后，就选择了文档中所有的form元素，并对它们都执行了一次reset()。</p>
<p>还有一个你可能要面对的问题是不希望某些特定的元素被选择。jQuery 提供了filter() 和not() 方法来解决这个问题。 filter()以过滤表达式来减少不符合的被选择项, not()则用来取消所有符合过滤表达式的被选择项. 考虑一个无序的list，你想要选择所有的没有ul子元素的li元素。</p>
<pre>$(document).ready(function() {
$("li").not("[ul]").css("border", "1px solid black");
});</pre>
<p>这个代码选择了所有的li元素，然后去除了没有ul子元素的li元素。刷新浏览器后，所有的li元素都有了一个边框，只有ul子元素的那个li元素例外。</p>
<p class=log>（译者Keel注：请注意体会方便之极的css()方法，并再次提醒请务必实际测试观察效果，比方说换个CSS样式呢？再加一个CSS样式呢？像这样：$("li").not("[ul]").css("border", "1px solid black").css("color","red");）</p>
<p>上面代码中的[expression] 语法是从XPath而来，可以在子元素和属性(elements and attributes)上用作过滤器，比如你可能想选择所有的带有name属性的链接:</p>
<pre>$(document).ready(function() {
$("a[@name]").background("#eee");
});</pre>
<p>这个代码给所有带有name属性的链接加了一个背景色。<span class=log><font color=#008000>（译者Keel注：这个颜色太不明显了，建议写成$("a[@name]").background("red");）</font></span></p>
<p>更常见的情况是以name来选择链接，你可能需要选择一个有特点href属性的链接，这在不同的浏览器下对href的理解可能会不一致，所以我们的部分匹配("*=")的方式来代替完全匹配("=")：</p>
<pre>$(document).ready(function() {
$("a[@href*=/content/gallery]").click(function() {
// do something with all links that point somewhere to /content/gallery
});
});</pre>
<p>到现在为止，选择器都用来选择子元素或者是过滤元素。另外还有一种情况是选择上一个或者下一个元素，比如一个FAQ的页面，答案首先会隐藏，当问题点击时，答案显示出来，jQuery代码如下：</p>
<pre>$(document).ready(function() {
$('#faq').find('dd').hide().end().find('dt').click(function() {
var answer = $(this).next();
if (answer.is(':visible')) {
answer.slideUp();
} else {
answer.slideDown();
}
});
});</pre>
<p>这里我们用了一些链式表达法来减少代码量，而且看上去更直观更容易理解。像'#faq' 只选择了一次，利用end()方法，第一次find()方法会结束(undone)，所以我们可以接着在后面继续find('dt')，而不需要再写$('#faq').find('dt')。</p>
<p>在点击事件中的，我们用 $(this).next() 来找到dt下面紧接的一个dd元素，这让我们可以快速地选择在被点击问题下面的答案。</p>
<p class=log>（译者Keel注：这个例子真是太酷了，FAQ中的答案可以收缩！从利用next()的思路到实现这些效果都有很多地方需要我们消化，注意 if (answer.is(':visible'))用法，注意answer.slideUp();不懂的地方赶紧查我在最开始提到的两个必看API文档）</p>
<p>除了选择同级别的元素外，你也可以选择父级的元素。可能你想在用户鼠标移到文章某段的某个链接时，它的父级元素--也就是文章的这一段突出显示，试试这个：</p>
<pre>$(document).ready(function() {
$("a").hover(function() {
$(this).parents("p").addClass("highlight");
}, function() {
$(this).parents("p").removeClass("highlight");
});
});</pre>
<p>测试效果可以看到，移到文章某段的链接时，它所在的段全用上highlight样式，移走之后又恢复原样。</p>
<span class=log><font color=#008000>（译者Keel注：highlight是core.css中定义的样式，你也可以改变它，注意这里有第二个function()这是hover方法的特点，请在API文档中查阅hover，上面也有例子说明）</font></span>
<p>在我们继续之前我们先来看看这一步： jQuery会让代码变得更短从而更容易理解和维护，下面是$(document).ready(callback)的缩写法：</p>
<pre>$(function() {
// code to execute when the DOM is ready
});</pre>
<p>应用到我们的Hello world例子中，可以这样:</p>
<pre>$(function() {
$("a").click(function() {
alert("Hello world!");
});
});</pre>
<p>现在，我们手上有了这些基础的知识，我们可以更进一步的探索其它方面的东西，就从AJAX开始！</p>
<h4>本章的相关链接:</h4>
<ul>
    <li><a href="http://jquery.com/api/"><u><font color=#800080>jQuery API documentation</font></u></a>
    <li><a href="http://visualjquery.com/"><u><font color=#0000ff>Visual jQuery - A categorized browsable API documentation</font></u></a>
    <li><a href="http://jquery.com/docs/Base/Expression/CSS/"><u><font color=#0000ff>jQuery Expressions: CSS</font></u></a>
    <li><a href="http://jquery.com/docs/Base/Expression/XPath/"><u><font color=#0000ff>jQuery Expressions: XPath</font></u></a>
    <li><a href="http://jquery.com/docs/Base/Expression/Custom/"><u><font color=#0000ff>jQuery Expressions: Custom</font></u></a>
    <li><a href="http://jquery.com/docs/EventModule/"><u><font color=#0000ff>jQuery Special Events</font></u></a>
    <li><a href="http://jquery.com/docs/Base/Traverse/"><u><font color=#0000ff>jQuery DOM Traversing</font></u></a> </li>
</ul>
</div>
<div>
<h2 id=rate>Rate me:使用AJAX</h2>
<p>在这一部分我们写了一个小小的AJAX应用，它能够rate一些东西<span class=log><font color=#008000>（译Keel注：就是对某些东西投票）</font></span>，就像在youtube.com上面看到的一样。</p>
<p>首先我们需要一些服务器端代码，这个例子中用到了一个PHP文件，读取rating参数然后返回rating总数和平均数。看一下<a href="http://keel.sike.googlepages.com/rate.phps"><u><font color=#0000ff>rate.php</font></u></a>代码.</p>
<p>虽然这些例子也可以不使用AJAX来实现，但显示我们不会那么做，我们用jQuery生成一个DIV容器，ID是"rating".</p>
<pre>$(document).ready(function() {
// generate markup
var ratingMarkup = ["Please rate: "];
for(var i=1; i &lt;= 5; i++) {
ratingMarkup[ratingMarkup.length] = "&lt;a href='#'&gt;" + i + "&lt;/a&gt;&nbsp;";
}
// add markup to container and applier click handlers to anchors
$("#rating").append( ratingMarkup.join('') ).find("a").click(function(e) {
e.preventDefault();
// send requests
$.post("rate.php", {rating: $(this).html()}, function(xml) {
// format result
var result = [
"Thanks for rating, current average: ",
$("average", xml).text(),
", number of votes: ",
$("count", xml).text()
];
// output result
$("#rating").html(result.join(''));
} );
});
});</pre>
<p>这段代码生成了5个链接，并将它们追加到id为"rating"容器中，当其中一个链接被点击时，该链接标明的分数就会以rating参数形式发送到rate.php，然后，结果将以XML形式会从服务器端传回来，添加到容器中，替代这些链接。</p>
<p>如果你没有一个安装过PHP的webserver，你可以看看这个<a href="http://keel.sike.googlepages.com/example-rateme.html"><u><font color=#0000ff>在线的例子</font></u></a>.</p>
<p>不使用javascript实现的例子可以访问 <a href="http://www.softonic.de/ie/51494"><u><font color=#0000ff>softonic.de</font></u></a> 点击 "Kurz bewerten!"</p>
<p>更多的AJAX方法可以从<a class=doc title="Documentation for AJAX methods" href="http://jquery.com/docs/AJAXModule/"><u><font color=#0000ff>这里</font></u></a> 找到，或者看看<a href="http://visualjquery.com/"><u><font color=#0000ff>API文档</font></u></a> 下面的AJAX filed under AJAX.</p>
<p class=log>（译者Keel注：这个在线实例从国内访问还是比较慢的，点击后要等一会儿才能看到结果，可以考虑对它进行修改，比如加上loading，投票后加上再投票的返回链接等。此外，这个例子中还是有很多需要进一步消化的地方，看不懂的地方请参考API文档。）</p>
<p>一个在使用AJAX载入内容时经常发生的问题是：当载入一个事件句柄到一个HTML文档时，还需要在载入内容上应用这些事件，你不得不在内容加载完成后应用这些事件句柄，为了防止代码重复执行，你可能用到如下一个function:</p>
<pre>// lets use the shortcut
$(function() {
var addClickHandlers = function() {
$("a.clickMeToLoadContent").click(function() {
$("#target").load(this.href, addClickHandlers);
});
};
addClickHandlers();
});</pre>
<p>现在，addClickHandlers只在DOM载入完成后执行一次，这是在用户每次点击具有clickMeToLoadContent 这个样式的链接并且内容加载完成后.</p>
<p>请注意addClickHandlers函数是作为一个局部变量定义的，而不是全局变量(如：function addClickHandlers() {...})，这样做是为了防止与其他的全局变量或者函数相冲突.</p>
<p>另一个常见的问题是关于回调(callback)的参数。你可以通过一个额外的参数指定回调的方法，简单的办法是将这个回调方法包含在一个其它的function中:</p>
<pre>// get some data
var foobar = ...;
// specify handler, it needs data as a paramter
var handler = function(data) {
...
};
// add click handler and pass foobar!
$('a').click( function(event) { handler(foobar); } );
// if you need the context of the original handler, use apply:
$('a').click( function(event) { handler.apply(this, [foobar]); } );</pre>
<p>用到简单的AJAX后，我们可以认为已经非常之&#8220;web2.0&#8221;了，但是到现在为止，我们还缺少一些酷炫的效果。下一节将会谈到这些效果.</p>
<h4>本章的相关链接:</h4>
<ul>
    <li><a href="http://jquery.com/docs/AJAXModule/"><u><font color=#0000ff>jQuery AJAX Module</font></u></a>
    <li><a href="http://jquery.com/api/"><u><font color=#800080>jQuery API: Contains description and examples for append and all other jQuery methods</font></u></a>
    <li><a href="http://jquery.com/demo/thickbox/"><u><font color=#0000ff>ThickBox: A jQuery plugin that uses jQuery to enhance the famous lightbox</font></u></a> </li>
</ul>
</div>
<div>
<h2 id=animate>Animate me(让我生动起来):使用FX</h2>
<p>一些动态的效果可以使用 <code>show()</code> 和 <code>hide()</code>来表现:</p>
<pre>$(document).ready(function() {
$("a").toggle(function() {
$(".stuff").hide('slow');
}, function() {
$(".stuff").show('fast');
});
});</pre>
<p>你可以与 <code>animate()</code>联合起来创建一些效果,如一个带渐显的滑动效果:</p>
<pre>$(document).ready(function() {
$("a").toggle(function() {
$(".stuff").animate({
height: 'hide',
opacity: 'hide'
}, 'slow');
}, function() {
$(".stuff").animate({
height: 'show',
opacity: 'show'
}, 'slow');
});
});</pre>
<p>很多不错的效果可以访问<a href="http://interface.eyecon.ro/"><u><font color=#0000ff>interface plugin collection</font></u></a>. 这个站点提供了很多demos和文档</p>
<p>这些效果插件是位于jQuery插件列表的前面的，当然也有很多其他的插件，比如我们下一章讲到的表格排序插件。</p>
<h4>本章的相关链接:</h4>
<ul>
    <li><a href="http://jquery.com/docs/FxModule/"><u><font color=#0000ff>jQuery FX Module</font></u></a>
    <li><a href="http://interface.eyecon.ro/"><u><font color=#0000ff>Interface plugin</font></u></a> </li>
</ul>
</div>
<div>
<h2 id=sort>Sort me(将我有序化):使用tablesorter插件(表格排序)</h2>
<p>这个表格排序插件能让我们在客户端按某一列进行排序，引入jQuery和这个插件的js文件，然后告诉插件你想要哪个表格拥有排序功能。</p>
<p>要测试这个例子，先在starterkit.html中加上像下面这一行的代码：</p>
<pre>&lt;script src="lib/jquery.tablesorter.js" type="text/javascript"&gt;&lt;/script&gt;</pre>
<p>然后可以这样调用不着:</p>
<pre>$(document).ready(function() {
$("#large").tableSorter();
});</pre>
<p>现在点击表格的第一行head区域，你可以看到排序的效果，再次点击会按倒过来的顺序进行排列。</p>
<p>这个表格还可以加一些突出显示的效果，我们可以做这样一个隔行背景色（斑马线）效果:</p>
<pre>$(document).ready(function() {
$("#large").tableSorter({
stripingRowClass: ['odd','even'],	// Class names for striping supplyed as a array.
stripRowsOnStartUp: true		// Strip rows on tableSorter init.
});
});</pre>
<p>关于这个插件的更多例子和文档可以在 <a href="http://motherrussia.polyester.se/jquery-plugins/tablesorter/"><u><font color=#0000ff>tablesorter首页</font></u></a>找到.</p>
<p>几乎所有的特件都是这样用的:先include插件的js文件,然后在某些元素上使用插件定义的方法,当然也有一些参数选项是可以配置的</p>
<p>经常更新的插件列表可以从jQuery官方站 <a title="Plugins for jQuery" href="http://jquery.com/plugins/"><u><font color=#0000ff>on the jQuery site</font></u></a>找到.</p>
<p>当你更经常地使用jQuery时,你会发现将你自己的代码打包成插件是很有用处的,它能方便地让你的公司或者其他人进行重用.下一章我们将谈到如何构建一个自己的插件.</p>
<h4>本章的相关链接:</h4>
<ul>
    <li><a href="http://jquery.com/plugins/"><u><font color=#0000ff>Plugins for jQuery</font></u></a>
    <li><a href="http://motherrussia.polyester.se/jquery-plugins/tablesorter/"><u><font color=#0000ff>Tablesorter Plugin</font></u></a> </li>
</ul>
</div>
<div>
<h2 id=plug>Plug me:制作自己的插件</h2>
<p>写一个自己的jQuery插件是非常容易的,如果你按照下面的原则来做,可以让其他人也容易地结合使用你的插件.</p>
<ol>
    <li>为你的插件取一个名字,在这个例子里面我们叫它"foobar".
    <li>创建一个像这样的文件:jquery.[yourpluginname].js,比如我们创建一个jquery.foobar.js
    <li>创建一个或更多的插件方法,使用继承jQuery对象的方式,如:
    <pre>jQuery.fn.foobar = function() {
    // do something
    };</pre>
    <li>可选的:创建一个用于帮助说明的函数,如:
    <pre>jQuery.fooBar = {
    height: 5,
    calculateBar = function() { ... },
    checkDependencies = function() { ... }
    };</pre>
    <p>你现在可以在你的插件中使用这些帮助函数了:</p>
    <pre>jQuery.fn.foobar = function() {
    // do something
    jQuery.foobar.checkDependencies(value);
    // do something else
    };</pre>
    <li>可选的l:创建一个默认的初始参数配置,这些配置也可以由用户自行设定,如:
    <pre>jQuery.fn.foobar = function(options) {
    var settings = {
    value: 5,
    name: "pete",
    bar: 655
    };
    if(options) {
    jQuery.extend(settings, options);
    }
    };</pre>
    <p>现在可以无需做任何配置地使用插件了,默认的参数在此时生效:</p>
    <pre>$("...").foobar();</pre>
    <p>或者加入这些参数定义:</p>
    <pre>$("...").foobar({
    value: 123,
    bar: 9
    });</pre>
    </li>
</ol>
<p>如果你release你的插件, 你还应该提供一些例子和文档,大部分的插件都具备这些良好的参考文档.</p>
<p>现在你应该有了写一个插件的基础,让我们试着用这些知识写一个自己的插件.</p>
<p>很多人试着控制所有的radio或者checkbox是否被选中,比如:</p>
<pre>$("input[@type='checkbox']").each(function() {
this.checked = true;
// or, to uncheck
this.checked = false;
// or, to toggle
this.checked = !this.checked;
});</pre>
<p>无论何时候，当你的代码出现each时，你应该重写上面的代码来构造一个插件,很直接地:</p>
<pre>$.fn.check = function() {
return this.each(function() {
this.checked = true;
});
};</pre>
<p>这个插件现在可以这样用:</p>
<pre>$("input[@type='checkbox']").check();</pre>
<p>现在你应该还可以写出uncheck()和toggleCheck()了.但是先停一下,让我们的插件接收一些参数.</p>
<pre>$.fn.check = function(mode) {
var mode = mode || 'on'; // if mode is undefined, use 'on' as default
return this.each(function() {
switch(mode) {
case 'on':
this.checked = true;
break;
case 'off':
this.checked = false;
break;
case 'toggle':
this.checked = !this.checked;
break;
}
});
};</pre>
<p>这里我们设置了默认的参数,所以将"on"参数省略也是可以的,当然也可以加上"on","off", 或 "toggle",如:</p>
<pre>$("input[@type='checkbox']").check();
$("input[@type='checkbox']").check('on');
$("input[@type='checkbox']").check('off');
$("input[@type='checkbox']").check('toggle');</pre>
<p>如果有多于一个的参数设置会稍稍有点复杂,在使用时如果只想设置第二个参数,则要在第一个参数位置写入null.</p>
<p>从上一章的tablesorter插件用法我们可以看到,既可以省略所有参数来使用或者通过一个 key/value 对来重新设置每个参数.</p>
<p>作为一个练习,你可以试着将 <a href="http://keel.sike.googlepages.com/jQuery_getting_started.html#rate"><u><font color=#800080>第四章</font></u></a> 的功能重写为一个插件.这个插件的骨架应该是像这样的:</p>
<pre>$.fn.rateMe = function(options) {
var container = this; // instead of selecting a static container with $("#rating"), we now use the jQuery context
var settings = {
url: "rate.php"
// put more defaults here
// remember to put a comma (",") after each pair, but not after the last one!
};
if(options) { // check if options are present before extending the settings
$.extend(settings, options);
}
// ...
// rest of the code
// ...
return this; // if possible, return "this" to not break the chain
});</pre>
</div>
<div>
<h2 id=next>Next steps(下一步)</h2>
<p>如果你想做更好的javascript开发,建议你使用一个叫 <a href="http://www.joehewitt.com/software/firebug/"><u><font color=#0000ff>FireBug</font></u></a>的firefox插件. 它提供了断点调试(比alert强多了)、观察DOM变化等很多漂亮的功能</p>
<p>如果你还有未解决的问题，或者新的想法与建议，你可以使用jQuery的邮件列表 <a href="http://jquery.com/discuss"><u><font color=#0000ff>jQuery mailing list</font></u></a>.</p>
<p>关于这个指南的任何事情，你可以写<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#101;&#110;&#99;&#104;&#111;&#115;&#32;&#91;&#97;&#116;&#93;&#32;&#103;&#109;&#120;&#32;&#91;&#100;&#111;&#116;&#93;&#32;&#110;&#101;&#116;"><u><font color=#0000ff>mail</font></u></a>给作者或者发表评论在他的日志：<a href="http://bassistance.de/index.php/2006/09/12/jquery-getting-started-guide/"><u><font color=#0000ff>blog</font></u></a>.</p>
<p class=log>关于这个指南的翻译任何事情，你可以写<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#107;&#101;&#101;&#108;&#46;&#115;&#105;&#107;&#101;&#91;&#97;&#116;&#93;&#32;&#103;&#109;&#97;&#105;&#108;&#46;&#99;&#111;&#109;"><u><font color=#0000ff>mail</font></u></a>给我或者发表评论在我的日志：<a href="http://keelsike.blogspot.com/"><u><font color=#0000ff>blog</font></u></a>.</p>
</div>
<div>
<h3>还有什么...</h3>
<p>大大感谢John Resig创造了这么好的library! 感谢jQuery community 为John提供了如此多的咖啡和其他的一切!</p>
</div>
<h4><a href="http://bassistance.de/"><u><font color=#0000ff>&#169; 2006, J&#246;rn Zaefferer</font></u></a> - last update: 2006-09-12</h4>
<h4>中文版翻译:<a href="http://keelsike.blogspot.com/"><u><font color=#0000ff>Keel</font></u></a> - 最后更新: 2006-12-13</h4>
<script src="http://www.google-analytics.com/urchin.js" type=text/javascript>
</script>
<script type=text/javascript>
_uacct = "UA-333331-3";
urchinTracker();
</script>
<img src ="http://www.blogjava.net/zhuyan/aggbug/132685.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhuyan/" target="_blank">朱岩</a> 2007-07-27 09:25 <a href="http://www.blogjava.net/zhuyan/articles/132685.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>showModelessDialog()使用详解</title><link>http://www.blogjava.net/zhuyan/articles/125819.html</link><dc:creator>朱岩</dc:creator><author>朱岩</author><pubDate>Fri, 22 Jun 2007 06:04:00 GMT</pubDate><guid>http://www.blogjava.net/zhuyan/articles/125819.html</guid><wfw:comment>http://www.blogjava.net/zhuyan/comments/125819.html</wfw:comment><comments>http://www.blogjava.net/zhuyan/articles/125819.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhuyan/comments/commentRss/125819.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhuyan/services/trackbacks/125819.html</trackback:ping><description><![CDATA[Javascript有许多内建的方法来产生对话框，如：window.alert(), window.confirm(),window.prompt().等。 然而IE提供更多的方法支持对话框。如：
<p>&nbsp;&nbsp;&nbsp; showModalDialog() (IE 4+ 支持)<br>　&nbsp; showModelessDialog() (IE 5+ 支持)</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;window.showModalDialog()方法用来创建一个显示HTML内容的模态对话框，由于是对话框，因此它并没有一般用window.open()打开的窗口的所有属性。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;window.showModelessDialog()方法用来创建一个显示HTML内容的非模态对话框。 </p>
<p>&nbsp;&nbsp;&nbsp; 当我们用showModelessDialog()打开窗口时，不必用window.close()去关闭它，当以非模态方式［IE5］打开时， 打开对话框的窗口仍可以进行其他的操作，即对话框不总是最上面的焦点，当打开它的窗口ＵＲＬ改变时，它自动关闭。而模态［ＩＥ４］方式的对话框始终有焦点（焦点不可移走，直到它关闭）。模态对话框和打开它的窗口相联系，因此我们打开另外的窗口时，他们的链接关系依然保存，并且隐藏在活动窗口的下面。</p>
<p>使用方法如下：<br>&nbsp;&nbsp;&nbsp;&nbsp;vReturnValue = window.showModalDialog(sURL [, vArguments] [, sFeatures])<br>&nbsp;&nbsp;&nbsp;&nbsp;vReturnValue = window.showModelessDialog(sURL [, vArguments] [, sFeatures])</p>
<p>参数说明：<br>&nbsp;&nbsp; &nbsp;sURL<br>&nbsp; &nbsp;必选参数，类型：字符串。用来指定对话框要显示的文档的URL。<br>&nbsp;&nbsp; &nbsp;vArguments<br>&nbsp; &nbsp;可选参数，类型：变体。用来向对话框传递参数。传递的参数类型不限，包括数组等。对话框通过window.dialogArguments来取得传递进来的参数。<br>&nbsp;&nbsp; &nbsp;sFeatures<br>&nbsp; &nbsp;可选参数，类型：字符串。用来描述对话框的外观等信息，可以使用以下的一个或几个，用分号&#8220;;&#8221;隔开。<br>&nbsp;&nbsp;&nbsp;&nbsp;dialogHeight 对话框高度，不小于１００px，ＩＥ４中dialogHeight 和 dialogWidth 默认的单位是em，而ＩＥ５中是px，为方便其见，在定义modal方式的对话框时，用px做单位。<br>&nbsp;　 dialogWidth: 对话框宽度。<br>&nbsp;　 dialogLeft: 距离桌面左的距离。<br>&nbsp;　 dialogTop: 离桌面上的距离。<br>&nbsp;　 center: {yes | no | 1 | 0 }：窗口是否居中，默认yes，但仍可以指定高度和宽度。<br>&nbsp;　&nbsp;help: {yes | no | 1 | 0 }：是否显示帮助按钮，默认yes。<br>&nbsp;　&nbsp;resizable: {yes | no | 1 | 0 } ［ＩＥ５＋］：是否可被改变大小。默认no。<br>&nbsp;　 status: {yes | no | 1 | 0 } ［IE5+］：是否显示状态栏。默认为yes[ Modeless]或no[Modal]。<br>&nbsp;&nbsp;&nbsp;&nbsp;scroll:{ yes | no | 1 | 0 | on | off }：指明对话框是否显示滚动条。默认为yes。</p>
<p>还有几个属性是用在HTA中的，在一般的网页中一般不使用。<br>&nbsp;&nbsp;&nbsp;&nbsp;dialogHide:{ yes | no | 1 | 0 | on | off }：在打印或者打印预览时对话框是否隐藏。默认为no。<br>&nbsp;&nbsp;&nbsp;&nbsp;edge:{ sunken | raised }：指明对话框的边框样式。默认为raised。<br>&nbsp;&nbsp;&nbsp;&nbsp;unadorned:{ yes | no | 1 | 0 | on | off }：默认为no。</p>
<p>传入参数：<br>&nbsp;&nbsp;&nbsp; 要想对话框传递参数，是通过vArguments来进行传递的。类型不限制，对于字符串类型，最大为4096个字符。也可以传递对象，例如：</p>
<p>test1.htm<br><span class=code>&lt;script&gt;<br>&nbsp;&nbsp;var mxh1 = new Array("mxh","net_lover","孟子E章")<br>&nbsp;&nbsp;var mxh2 = window.open("about:blank","window_mxh")<br>&nbsp;&nbsp;// 向对话框传递数组<br>&nbsp;&nbsp;window.showModalDialog("test2.htm",mxh1)<br>&nbsp;&nbsp;// 向对话框传递window对象<br>&nbsp;&nbsp;window.showModalDialog("test3.htm",mxh2)<br>&lt;/script&gt;</span>test2.htm<br><span class=code>&lt;script&gt;<br>&nbsp;&nbsp;var a = window.dialogArguments<br>&nbsp;&nbsp;alert("您传递的参数为：" + a)<br>&lt;/script&gt;</span>&nbsp;<br>test3.htm<br><span class=code>&lt;script&gt;<br>&nbsp;&nbsp;var a = window.dialogArguments<br>&nbsp;&nbsp;alert("您传递的参数为window对象，名称：" + a.name)<br>&nbsp;&lt;/script&gt;</span></p>
<p>&nbsp;可以通过window.returnValue向打开对话框的窗口返回信息，当然也可以是对象。例如：</p>
<p>test4.htm<br><span class=code>&lt;script&gt;<br>&nbsp;&nbsp;var a = window.showModalDialog("test5.htm")<br>&nbsp;&nbsp;for(i=0;i&lt;a.length;i++) alert(a[i])<br>&lt;/script&gt;</span>test5.htm<br><span class=code>&nbsp;&lt;script&gt;<br>&nbsp;function sendTo()<br>&nbsp;{<br>&nbsp;&nbsp;var a=new Array("a","b")<br>&nbsp;&nbsp;window.returnValue = a<br>&nbsp;&nbsp;window.close()<br>&nbsp;}<br>&nbsp;&lt;/script&gt;<br>&nbsp;&lt;body&gt;<br>&nbsp;&lt;form&gt;<br>&nbsp;&nbsp;&lt;input value="返回" type=button onclick="sendTo()"&gt;<br>&nbsp;&lt;/form&gt;</span></p>
<p>常见问题：<br>1，如何在模态对话框中进行提交而不新开窗口？<br>&nbsp;&nbsp; 如果你 的 浏览器是IE5.5+,可以在对话框中使用带name属性的iframe，提交时可以制定target为该iframe的name。对于IE4+，你可以用高度为0的frame来作。例如：</p>
<p>&nbsp;test6.htm<br><span class=code>&lt;script&gt;<br>&nbsp;&nbsp;window.showModalDialog("test7.htm")<br>&nbsp;&lt;/script&gt;</span>&nbsp;test7.htm<br><span class=code>if(window.location.search) alert(window.location.search)<br>&nbsp;&lt;frameset rows="0,*"&gt;<br>&nbsp;&nbsp;&lt;frame src="about:blank"&gt;<br>&nbsp;&nbsp;&lt;frame src="test8.htm"&gt;<br>&nbsp;&lt;/frameset&gt;</span>&nbsp;test8.htm<br><span class=code>&lt;form target="_self" method="get"&gt;<br>&nbsp;&lt;input name=txt value="test"&gt;<br>&nbsp;&lt;input type=submit&gt;<br>&nbsp;&lt;/form&gt;<br>&nbsp;&lt;script&gt;<br>&nbsp;if(window.location.search) alert(window.location.search)<br>&nbsp;&lt;/script&gt;<br></span>&nbsp;</p>
<p>2,可以通过http://servername/virtualdirname/test.htm?name=mxh方式直接向对话框传递参数吗？<br>&nbsp;答案是不能。但在frame里是可以的。</p>
<br>
<p><span><span id=zoom>用window.showModalDialog 或者window.showModelessDialog打开一个模式窗口后，和父窗口的一些交互问题。<br>要进行交互操作的前提，在调用showModalDialog或者showModelessDialog方法的时候，第二个参数传window，如：<br></span></span></p>
<div id=code>
<div style="MARGIN-LEFT: 5pt"><code>
<ol>
    <li><span style="COLOR: #000000"><span style="COLOR: #0000cc">window</span><span style="COLOR: #006600">.</span><span style="COLOR: #0000cc">showModelessDialog</span><span style="COLOR: #006600">(</span><span style="COLOR: #cc0000">'filename.htm'</span><span style="COLOR: #006600">,</span><span style="COLOR: #0000cc">window</span><span style="COLOR: #006600">,</span><span style="COLOR: #cc0000">'dialogWidth=200px;dialogHeight=250px;'</span><span style="COLOR: #006600">)</span> </span></li>
</ol>
</code><br></div>
</div>
<p><br>接下来，就是取得父窗口的一些数据和方法，这是经常会用的，父窗口取子窗口的参数一般通过returnValue就可以搞定了～<br></p>
<div id=code>
<div style="MARGIN-LEFT: 5pt"><code>
<ol>
    <li><span style="COLOR: #000000"><span style="COLOR: #0000cc"></span><span style="COLOR: #ff9900">//取得父窗口的JS变量&nbsp;var<br></span><span style="COLOR: #0000cc">window</span><span style="COLOR: #006600">.</span><span style="COLOR: #0000cc">dialogArguments</span><span style="COLOR: #006600">.var;<br></span><span style="COLOR: #ff9900">//获得父窗口的对象和属性<br></span><span style="COLOR: #0000cc">window</span><span style="COLOR: #006600">.</span><span style="COLOR: #0000cc">dialogArguments</span><span style="COLOR: #006600">.</span><span style="COLOR: #0000cc">form1</span><span style="COLOR: #006600">.</span><span style="COLOR: #0000cc">name</span><span style="COLOR: #006600">.</span><span style="COLOR: #0000cc">value&nbsp;</span><span style="COLOR: #006600">;<br></span><span style="COLOR: #ff9900">//调用父窗口的方法&nbsp;fun<br></span><span style="COLOR: #0000cc">window</span><span style="COLOR: #006600">.</span><span style="COLOR: #0000cc">dialogArguments</span><span style="COLOR: #006600">.</span><span style="COLOR: #0000cc">fun</span><span style="COLOR: #006600">()&nbsp;;</span> </span></li>
</ol>
</code></div>
</div>
<img src ="http://www.blogjava.net/zhuyan/aggbug/125819.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhuyan/" target="_blank">朱岩</a> 2007-06-22 14:04 <a href="http://www.blogjava.net/zhuyan/articles/125819.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Javascript里延迟函数的复习 </title><link>http://www.blogjava.net/zhuyan/articles/125737.html</link><dc:creator>朱岩</dc:creator><author>朱岩</author><pubDate>Fri, 22 Jun 2007 01:49:00 GMT</pubDate><guid>http://www.blogjava.net/zhuyan/articles/125737.html</guid><wfw:comment>http://www.blogjava.net/zhuyan/comments/125737.html</wfw:comment><comments>http://www.blogjava.net/zhuyan/articles/125737.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhuyan/comments/commentRss/125737.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhuyan/services/trackbacks/125737.html</trackback:ping><description><![CDATA[1.setTimeout()和clearTimeout()函数是一对控制页面定时触发时间的起始函数。 <br><br>2.handle = setTimeout(statement, microime)，的作用是设定每mircotime毫秒执行一次statement，并把返回一个句柄给handle，以便可以用clearTimeout(handle)来结束计时。 //Javascript Wait Function Demo <br><br>Demo:<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">&nbsp;1</span><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">h3</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">//Javascript&nbsp;Wait&nbsp;Function&nbsp;Demo</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">h3</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;2</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">hr</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;3</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">input&nbsp;</span><span style="COLOR: #ff0000">type</span><span style="COLOR: #0000ff">="button"</span><span style="COLOR: #ff0000">&nbsp;value</span><span style="COLOR: #0000ff">="请点击,2秒后打开一个警告"</span><span style="COLOR: #ff0000">&nbsp;id</span><span style="COLOR: #0000ff">="redhacker"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;4</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">input&nbsp;</span><span style="COLOR: #ff0000">type</span><span style="COLOR: #0000ff">="button"</span><span style="COLOR: #ff0000">&nbsp;value</span><span style="COLOR: #0000ff">="停止"</span><span style="COLOR: #ff0000">&nbsp;id</span><span style="COLOR: #0000ff">="dgq"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;5</span><span style="COLOR: #000000"><img id=Codehighlighter1_155_383_Open_Image onclick="this.style.display='none'; Codehighlighter1_155_383_Open_Text.style.display='none'; Codehighlighter1_155_383_Closed_Image.style.display='inline'; Codehighlighter1_155_383_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_155_383_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_155_383_Closed_Text.style.display='none'; Codehighlighter1_155_383_Open_Image.style.display='inline'; Codehighlighter1_155_383_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">script</span><span style="COLOR: #0000ff">&gt;</span><span id=Codehighlighter1_155_383_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_155_383_Open_Text><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><br></span><span style="COLOR: #008080">&nbsp;6</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">//</span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">code&nbsp;by&nbsp;douguoqiang1980@163.com</span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5"><br></span><span style="COLOR: #008080">&nbsp;7</span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">var</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;handle;<br></span><span style="COLOR: #008080">&nbsp;8</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><img id=Codehighlighter1_259_305_Open_Image onclick="this.style.display='none'; Codehighlighter1_259_305_Open_Text.style.display='none'; Codehighlighter1_259_305_Closed_Image.style.display='inline'; Codehighlighter1_259_305_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_259_305_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_259_305_Closed_Text.style.display='none'; Codehighlighter1_259_305_Open_Image.style.display='inline'; Codehighlighter1_259_305_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>document.getElementById(</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">redhacker</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">).onclick&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">function</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">()</span><span id=Codehighlighter1_259_305_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_259_305_Open_Text><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">{handle&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;setTimeout(</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">alert('你好，红色黑客！')</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">,</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">2000</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">)}</span></span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">;<br></span><span style="COLOR: #008080">&nbsp;9</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><img id=Codehighlighter1_359_381_Open_Image onclick="this.style.display='none'; Codehighlighter1_359_381_Open_Text.style.display='none'; Codehighlighter1_359_381_Closed_Image.style.display='inline'; Codehighlighter1_359_381_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_359_381_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_359_381_Closed_Text.style.display='none'; Codehighlighter1_359_381_Open_Image.style.display='inline'; Codehighlighter1_359_381_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>document.getElementById(</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">dgq</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">).onclick&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">function</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">()</span><span id=Codehighlighter1_359_381_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_359_381_Open_Text><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">{clearTimeout(handle);}</span></span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">;<br></span><span style="COLOR: #008080">10</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">script</span><span style="COLOR: #0000ff">&gt;</span></div>
<br>说明：点击第一个按钮，将两秒后弹出一个警告框。在点击第一个按钮后，还不到两秒时，点&#8220;停止&#8221;按钮，则取消等待，并警告框也不会弹出。
<p>3.setInterval()和clearInterval()两个函数，和以上两个函数大同小异，区别在于前者用来定时要在将来某个时候执行一次的函数或者表达式；而后者多用于要反复调用的函数和语句，他们之间只间隔一个固定的时间，这个时间过程中不是一个等待的过程，因为当延迟其作用时，其它的处理过程并不挂起！所以用setInterval()来制作网页动画要更合理一些！他们的语法格式是：</p>
<p><em>iTimerID</em> = <em>window</em><strong>.setInterval(</strong><em>vCode</em><strong>, </strong><em>iMilliSeconds</em><strong> [, </strong><em>sLanguage</em><strong>])<br></strong><br>Demo1:<br></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">&nbsp;1</span><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">h3</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">//Javascript&nbsp;Wait&nbsp;Function&nbsp;Demo</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">h3</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;2</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">hr</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;3</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">input&nbsp;</span><span style="COLOR: #ff0000">type</span><span style="COLOR: #0000ff">="button"</span><span style="COLOR: #ff0000">&nbsp;value</span><span style="COLOR: #0000ff">="10"</span><span style="COLOR: #ff0000">&nbsp;id</span><span style="COLOR: #0000ff">="redhacker"</span><span style="COLOR: #ff0000">&nbsp;style</span><span style="COLOR: #0000ff">="width:50"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;4</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">input&nbsp;</span><span style="COLOR: #ff0000">type</span><span style="COLOR: #0000ff">="button"</span><span style="COLOR: #ff0000">&nbsp;value</span><span style="COLOR: #0000ff">="停止"</span><span style="COLOR: #ff0000">&nbsp;id</span><span style="COLOR: #0000ff">="dgq"</span><span style="COLOR: #ff0000">&nbsp;style</span><span style="COLOR: #0000ff">="width:50"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;5</span><span style="COLOR: #000000"><img id=Codehighlighter1_178_493_Open_Image onclick="this.style.display='none'; Codehighlighter1_178_493_Open_Text.style.display='none'; Codehighlighter1_178_493_Closed_Image.style.display='inline'; Codehighlighter1_178_493_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_178_493_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_178_493_Closed_Text.style.display='none'; Codehighlighter1_178_493_Open_Image.style.display='inline'; Codehighlighter1_178_493_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">script</span><span style="COLOR: #0000ff">&gt;</span><span id=Codehighlighter1_178_493_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_178_493_Open_Text><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><br></span><span style="COLOR: #008080">&nbsp;6</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">//</span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">code&nbsp;by&nbsp;douguoqiang1980@163.com</span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5"><br></span><span style="COLOR: #008080">&nbsp;7</span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>//</span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">直接调用函数的示例</span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5"><br></span><span style="COLOR: #008080">&nbsp;8</span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5"><img id=Codehighlighter1_250_364_Open_Image onclick="this.style.display='none'; Codehighlighter1_250_364_Open_Text.style.display='none'; Codehighlighter1_250_364_Closed_Image.style.display='inline'; Codehighlighter1_250_364_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_250_364_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_250_364_Closed_Text.style.display='none'; Codehighlighter1_250_364_Open_Image.style.display='inline'; Codehighlighter1_250_364_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top></span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">var</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;alertFun&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">function</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">()</span><span id=Codehighlighter1_250_364_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_250_364_Open_Text><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">{<br></span><span style="COLOR: #008080">&nbsp;9</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">var</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;n&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;document.getElementById(</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">redhacker</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">).value;<br></span><span style="COLOR: #008080">10</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;document.getElementById(</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">redhacker</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">).value&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;n</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">-</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">1</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">;<br></span><span style="COLOR: #008080">11</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;}</span></span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><br></span><span style="COLOR: #008080">12</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>handle&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;setInterval(alertFun,</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">1000</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">);<br></span><span style="COLOR: #008080">13</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><img id=Codehighlighter1_454_492_Open_Image onclick="this.style.display='none'; Codehighlighter1_454_492_Open_Text.style.display='none'; Codehighlighter1_454_492_Closed_Image.style.display='inline'; Codehighlighter1_454_492_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_454_492_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_454_492_Closed_Text.style.display='none'; Codehighlighter1_454_492_Open_Image.style.display='inline'; Codehighlighter1_454_492_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>document.getElementById(</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">dgq</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">).onclick&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">function</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">()</span><span id=Codehighlighter1_454_492_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_454_492_Open_Text><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">{clearInterval(handle);alert(</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">倒记时已停止</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">)}</span></span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><br></span><span style="COLOR: #008080">14</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">script</span><span style="COLOR: #0000ff">&gt;</span></div>
<p>Domo2:<br></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">&nbsp;1</span><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">h3</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">//Javascript&nbsp;Wait&nbsp;Function&nbsp;Demo</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">h3</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;2</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">hr</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;3</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">input&nbsp;</span><span style="COLOR: #ff0000">type</span><span style="COLOR: #0000ff">="button"</span><span style="COLOR: #ff0000">&nbsp;value</span><span style="COLOR: #0000ff">="10"</span><span style="COLOR: #ff0000">&nbsp;id</span><span style="COLOR: #0000ff">="redhacker"</span><span style="COLOR: #ff0000">&nbsp;style</span><span style="COLOR: #0000ff">="width:50"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;4</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">input&nbsp;</span><span style="COLOR: #ff0000">type</span><span style="COLOR: #0000ff">="button"</span><span style="COLOR: #ff0000">&nbsp;value</span><span style="COLOR: #0000ff">="停止"</span><span style="COLOR: #ff0000">&nbsp;id</span><span style="COLOR: #0000ff">="dgq"</span><span style="COLOR: #ff0000">&nbsp;style</span><span style="COLOR: #0000ff">="width:50"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;5</span><span style="COLOR: #000000"><img id=Codehighlighter1_178_576_Open_Image onclick="this.style.display='none'; Codehighlighter1_178_576_Open_Text.style.display='none'; Codehighlighter1_178_576_Closed_Image.style.display='inline'; Codehighlighter1_178_576_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_178_576_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_178_576_Closed_Text.style.display='none'; Codehighlighter1_178_576_Open_Image.style.display='inline'; Codehighlighter1_178_576_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">script</span><span style="COLOR: #0000ff">&gt;</span><span id=Codehighlighter1_178_576_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_178_576_Open_Text><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><br></span><span style="COLOR: #008080">&nbsp;6</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">//</span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">code&nbsp;by&nbsp;douguoqiang1980@163.com</span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5"><br></span><span style="COLOR: #008080">&nbsp;7</span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>//</span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">调用对象自定义方法，并复习如何给一个内置对象添加一个方法</span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5"><br></span><span style="COLOR: #008080">&nbsp;8</span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5"><img id=Codehighlighter1_269_383_Open_Image onclick="this.style.display='none'; Codehighlighter1_269_383_Open_Text.style.display='none'; Codehighlighter1_269_383_Closed_Image.style.display='inline'; Codehighlighter1_269_383_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_269_383_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_269_383_Closed_Text.style.display='none'; Codehighlighter1_269_383_Open_Image.style.display='inline'; Codehighlighter1_269_383_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top></span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">var</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;alertFun&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">function</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">()</span><span id=Codehighlighter1_269_383_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_269_383_Open_Text><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">{<br></span><span style="COLOR: #008080">&nbsp;9</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">var</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;n&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;document.getElementById(</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">redhacker</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">).value;<br></span><span style="COLOR: #008080">10</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;document.getElementById(</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">redhacker</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">).value&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;n</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">-</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">1</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">;<br></span><span style="COLOR: #008080">11</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;}</span></span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><br></span><span style="COLOR: #008080">12</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>Object.prototype.aMethod&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;alertFun;<br></span><span style="COLOR: #008080">13</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">var</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;o&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">new</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;Object();<br></span><span style="COLOR: #008080">14</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">var</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;handle&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;setInterval(o.aMethod,</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">1000</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">);<br></span><span style="COLOR: #008080">15</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><img id=Codehighlighter1_537_575_Open_Image onclick="this.style.display='none'; Codehighlighter1_537_575_Open_Text.style.display='none'; Codehighlighter1_537_575_Closed_Image.style.display='inline'; Codehighlighter1_537_575_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_537_575_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_537_575_Closed_Text.style.display='none'; Codehighlighter1_537_575_Open_Image.style.display='inline'; Codehighlighter1_537_575_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>document.getElementById(</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">dgq</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">).onclick&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">function</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">()</span><span id=Codehighlighter1_537_575_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_537_575_Open_Text><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">{clearInterval(handle);alert(</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">倒记时已停止</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">)}</span></span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><br></span><span style="COLOR: #008080">16</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">script</span><span style="COLOR: #0000ff">&gt;</span></div>
<p>Demo3:<br></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">&nbsp;1</span><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">h3</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">//Javascript&nbsp;Wait&nbsp;Function&nbsp;Demo</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">h3</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;2</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">hr</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;3</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">input&nbsp;</span><span style="COLOR: #ff0000">type</span><span style="COLOR: #0000ff">="button"</span><span style="COLOR: #ff0000">&nbsp;value</span><span style="COLOR: #0000ff">="10"</span><span style="COLOR: #ff0000">&nbsp;id</span><span style="COLOR: #0000ff">="redhacker"</span><span style="COLOR: #ff0000">&nbsp;style</span><span style="COLOR: #0000ff">="width:50"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;4</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">input&nbsp;</span><span style="COLOR: #ff0000">type</span><span style="COLOR: #0000ff">="button"</span><span style="COLOR: #ff0000">&nbsp;value</span><span style="COLOR: #0000ff">="停止"</span><span style="COLOR: #ff0000">&nbsp;id</span><span style="COLOR: #0000ff">="dgq"</span><span style="COLOR: #ff0000">&nbsp;style</span><span style="COLOR: #0000ff">="width:50"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;5</span><span style="COLOR: #000000"><img id=Codehighlighter1_178_600_Open_Image onclick="this.style.display='none'; Codehighlighter1_178_600_Open_Text.style.display='none'; Codehighlighter1_178_600_Closed_Image.style.display='inline'; Codehighlighter1_178_600_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_178_600_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_178_600_Closed_Text.style.display='none'; Codehighlighter1_178_600_Open_Image.style.display='inline'; Codehighlighter1_178_600_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">script</span><span style="COLOR: #0000ff">&gt;</span><span id=Codehighlighter1_178_600_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_178_600_Open_Text><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><br></span><span style="COLOR: #008080">&nbsp;6</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">//</span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">code&nbsp;by&nbsp;douguoqiang1980@163.com</span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5"><br></span><span style="COLOR: #008080">&nbsp;7</span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>//</span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">自定义对象，并为对象添加一个自定义方法，调用改方法</span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5"><br></span><span style="COLOR: #008080">&nbsp;8</span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5"><img id=Codehighlighter1_266_380_Open_Image onclick="this.style.display='none'; Codehighlighter1_266_380_Open_Text.style.display='none'; Codehighlighter1_266_380_Closed_Image.style.display='inline'; Codehighlighter1_266_380_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_266_380_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_266_380_Closed_Text.style.display='none'; Codehighlighter1_266_380_Open_Image.style.display='inline'; Codehighlighter1_266_380_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top></span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">var</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;alertFun&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">function</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">()</span><span id=Codehighlighter1_266_380_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_266_380_Open_Text><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">{<br></span><span style="COLOR: #008080">&nbsp;9</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">var</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;n&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;document.getElementById(</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">redhacker</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">).value;<br></span><span style="COLOR: #008080">10</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;document.getElementById(</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">redhacker</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">).value&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;n</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">-</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">1</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">;<br></span><span style="COLOR: #008080">11</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;}</span></span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><br></span><span style="COLOR: #008080">12</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><img id=Codehighlighter1_401_403_Open_Image onclick="this.style.display='none'; Codehighlighter1_401_403_Open_Text.style.display='none'; Codehighlighter1_401_403_Closed_Image.style.display='inline'; Codehighlighter1_401_403_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_401_403_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_401_403_Closed_Text.style.display='none'; Codehighlighter1_401_403_Open_Image.style.display='inline'; Codehighlighter1_401_403_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top></span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">function</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;myObject()</span><span id=Codehighlighter1_401_403_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_401_403_Open_Text><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">{<br></span><span style="COLOR: #008080">13</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><br></span><span style="COLOR: #008080">14</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>myObject.prototype.aMethod&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;alertFun;<br></span><span style="COLOR: #008080">15</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">var</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;o&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">new</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;myObject();<br></span><span style="COLOR: #008080">16</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">var</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;handle&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;setInterval(o.aMethod,</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">1000</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">);<br></span><span style="COLOR: #008080">17</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><img id=Codehighlighter1_561_599_Open_Image onclick="this.style.display='none'; Codehighlighter1_561_599_Open_Text.style.display='none'; Codehighlighter1_561_599_Closed_Image.style.display='inline'; Codehighlighter1_561_599_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_561_599_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_561_599_Closed_Text.style.display='none'; Codehighlighter1_561_599_Open_Image.style.display='inline'; Codehighlighter1_561_599_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>document.getElementById(</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">dgq</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">).onclick&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">function</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">()</span><span id=Codehighlighter1_561_599_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_561_599_Open_Text><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">{clearInterval(handle);alert(</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">倒记时已停止</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">)}</span></span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><br></span><span style="COLOR: #008080">18</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">script</span><span style="COLOR: #0000ff">&gt;</span></div>
<p>补充：这四个函数确切的说，是window对象的方法，window 是DOM中的一个顶级对象。只是如果不写对象名，就默认是window,就像alert()等用于window.alert()一样！<br><br><br></p>
<img src ="http://www.blogjava.net/zhuyan/aggbug/125737.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhuyan/" target="_blank">朱岩</a> 2007-06-22 09:49 <a href="http://www.blogjava.net/zhuyan/articles/125737.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>automation服务器不能创建对象”的问题的解决方案大全 </title><link>http://www.blogjava.net/zhuyan/articles/125524.html</link><dc:creator>朱岩</dc:creator><author>朱岩</author><pubDate>Thu, 21 Jun 2007 04:35:00 GMT</pubDate><guid>http://www.blogjava.net/zhuyan/articles/125524.html</guid><wfw:comment>http://www.blogjava.net/zhuyan/comments/125524.html</wfw:comment><comments>http://www.blogjava.net/zhuyan/articles/125524.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhuyan/comments/commentRss/125524.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhuyan/services/trackbacks/125524.html</trackback:ping><description><![CDATA[本人工作中的应用系统都是jsp的，大量javascript程序，一旦出&#8220;automation服务器不能创建对象&#8221;问题，大量报表及查询无法保存，苦思冥 <br><br>想、千尝万试，终于将其搞定，现将相关方案与大家共享。 <br>1、如果是Scripting.FileSystemObject (FSO 文本文件读写)被关闭了，开启FSO功能即可，在&#8220;运行&#8221;中执行regsvr32 scrrun.dll即可 <br><br>2、安全模式设置成&#8220;中&#8221;，如果javascript脚本中报这个错误，还应将IE的安全设置&#8220;不允许运行未标记为安全的activeX控件&#8221;启用即可。 <br><br>注意如果您将相应的网站设成&#8220;受信任的站点&#8221;，必须对&#8220;受信任的站点&#8221;进行相应的IE安全设置，此时如果对&#8220;Internet&#8221;IE设置将是徒劳 <br><br>的。 <br><br>3、有些脚本需要微软的 MSXML 控件才能进入。当使用 IE 5 以上版本的缺省安全模式时，会提示是否接受 MSXML 控件，如果接受，MSXML 将 <br><br>自动安装到您的机器上(得等上几分钟)。如果自动安装不成功，可以自行下载和安装 MSXML 3.0 SP7。有时是由于msxml 3服务被关掉了，使用 <br><br>regsvr32 msxml3.dll即可 <br><br>4、用上面方法基本上能决问题。如果是在安装某个软件后出现这种问题，可尝度卸载该软件或重装一下！ <br>
<img src ="http://www.blogjava.net/zhuyan/aggbug/125524.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhuyan/" target="_blank">朱岩</a> 2007-06-21 12:35 <a href="http://www.blogjava.net/zhuyan/articles/125524.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>深入认识JavaScript中的函数</title><link>http://www.blogjava.net/zhuyan/articles/119901.html</link><dc:creator>朱岩</dc:creator><author>朱岩</author><pubDate>Fri, 25 May 2007 02:04:00 GMT</pubDate><guid>http://www.blogjava.net/zhuyan/articles/119901.html</guid><wfw:comment>http://www.blogjava.net/zhuyan/comments/119901.html</wfw:comment><comments>http://www.blogjava.net/zhuyan/articles/119901.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhuyan/comments/commentRss/119901.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhuyan/services/trackbacks/119901.html</trackback:ping><description><![CDATA[<strong><font size=4>一、概述<br></font></strong><font size=2>函数是进行模块化程序设计的基础，编写复杂的Ajax应用程序，必须对函数有更深入的了解。JavaScript中的函数不同于其他的语言，每个函数都是作为一个对象被维护和运行的。通过函数对象的性质，可以很方便的将一个函数赋值给一个变量或者将函数作为参数传递。在继续讲述之前，先看一下函数的使用语法：<br>function func1(&#8230;){&#8230;}<br>var func2=function(&#8230;){&#8230;};<br>var func3=function func4(&#8230;){&#8230;};<br>var func5=new Function();<br>这些都是声明函数的正确语法。它们和其他语言中常见的函数或之前介绍的函数定义方式有着很大的区别。那么在JavaScript中为什么能这么写？它所遵循的语法是什么呢？下面将介绍这些内容。<br><br></font><strong><font size=4>二、&nbsp; 认识函数对象（Function Object）<br></strong></font><font size=2>可以用function关键字定义一个函数，并为每个函数指定一个函数名，通过函数名来进行调用。在JavaScript解释执行时，函数都是被维护为一个对象，这就是要介绍的函数对象（Function Object）。<br>函数对象与其他用户所定义的对象有着本质的区别，这一类对象被称之为内部对象，例如日期对象（Date）、数组对象（Array）、字符串对象（String）都属于内部对象。这些内置对象的构造器是由JavaScript本身所定义的：通过执行new Array()这样的语句返回一个对象，JavaScript内部有一套机制来初始化返回的对象，而不是由用户来指定对象的构造方式。<br>在JavaScript 中，函数对象对应的类型是Function，正如数组对象对应的类型是Array，日期对象对应的类型是Date一样，可以通过new Function()来创建一个函数对象，也可以通过function关键字来创建一个对象。为了便于理解，我们比较函数对象的创建和数组对象的创建。先看数组对象：下面两行代码都是创建一个数组对象myArray：<br>var myArray=[];<br>//等价于<br>var myArray=new Array();<br>同样，下面的两段代码也都是创建一个函数myFunction：<br>function myFunction(a,b){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return a+b;<br>}<br>//等价于<br>var myFunction=new Function("a","b","return a+b");<br>通过和构造数组对象语句的比较，可以清楚的看到函数对象本质，前面介绍的函数声明是上述代码的第一种方式，而在解释器内部，当遇到这种语法时，就会自动构造一个Function对象，将函数作为一个内部的对象来存储和运行。从这里也可以看到，一个函数对象名称（函数变量）和一个普通变量名称具有同样的规范，都可以通过变量名来引用这个变量，但是函数变量名后面可以跟上括号和参数列表来进行函数调用。<br>用new Function()的形式来创建一个函数不常见，因为一个函数体通常会有多条语句，如果将它们以一个字符串的形式作为参数传递，代码的可读性差。下面介绍一下其使用语法：<br>var funcName=new Function(p1,p2,...,pn,body);<br>参数的类型都是字符串，p1到pn表示所创建函数的参数名称列表，body表示所创建函数的函数体语句，funcName就是所创建函数的名称。可以不指定任何参数创建一个空函数，不指定funcName创建一个无名函数，当然那样的函数没有任何意义。<br>需要注意的是，p1到pn是参数名称的列表，即p1不仅能代表一个参数，它也可以是一个逗号隔开的参数列表，例如下面的定义是等价的：<br>new Function("a", "b", "c", "return a+b+c")<br>new Function("a, b, c", "return a+b+c")<br>new Function("a,b", "c", "return a+b+c")<br>JavaScript引入Function类型并提供new Function()这样的语法是因为函数对象添加属性和方法就必须借助于Function这个类型。<br>函数的本质是一个内部对象，由JavaScript解释器决定其运行方式。通过上述代码创建的函数，在程序中可以使用函数名进行调用。本节开头列出的函数定义问题也得到了解释。注意可直接在函数声明后面加上括号就表示创建完成后立即进行函数调用，例如：<br>var i=function (a,b){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return a+b;<br>}(1,2);<br>alert(i);<br>这段代码会显示变量i的值等于3。i是表示返回的值，而不是创建的函数，因为括号&#8220;(&#8221;比等号&#8220;=&#8221;有更高的优先级。这样的代码可能并不常用，但当用户想在很长的代码段中进行模块化设计或者想避免命名冲突，这是一个不错的解决办法。<br>需要注意的是，尽管下面两种创建函数的方法是等价的：<br>function funcName(){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //函数体<br>}<br>//等价于<br>var funcName=function(){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //函数体<br>}<br>但前面一种方式创建的是有名函数，而后面是创建了一个无名函数，只是让一个变量指向了这个无名函数。在使用上仅有一点区别，就是：对于有名函数，它可以出现在调用之后再定义；而对于无名函数，它必须是在调用之前就已经定义。例如：<br>&lt;script language="JavaScript" type="text/javascript"&gt;<br>&lt;!--<br>func();<br>var func=function(){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert(1)<br>}<br>//--&gt;<br>&lt;/script&gt;<br>这段语句将产生func未定义的错误，而：<br>&lt;script language="JavaScript" type="text/javascript"&gt;<br>&lt;!--<br>func();<br>function func(){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert(1)<br>}<br>//--&gt;<br>&lt;/script&gt;<br>则能够正确执行，下面的语句也能正确执行：<br>&lt;script language="JavaScript" type="text/javascript"&gt;<br>&lt;!--<br>func();<br>var someFunc=function func(){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert(1)<br>}<br>//--&gt;<br>&lt;/script&gt;<br>由此可见，尽管JavaScript是一门解释型的语言，但它会在函数调用时，检查整个代码中是否存在相应的函数定义，这个函数名只有是通过function funcName()形式定义的才会有效，而不能是匿名函数。<br><br></font><strong><font size=4>三、&nbsp; 函数对象和其他内部对象的关系<br></strong></font><font size=2>除了函数对象，还有很多内部对象，比如：Object、Array、Date、RegExp、Math、Error。这些名称实际上表示一个类型，可以通过 new操作符返回一个对象。然而函数对象和其他对象不同，当用typeof得到一个函数对象的类型时，它仍然会返回字符串&#8220;function&#8221;，而 typeof一个数组对象或其他的对象时，它会返回字符串&#8220;object&#8221;。下面的代码示例了typeof不同类型的情况：<br>alert(typeof(Function)));<br>alert(typeof(new Function()));<br>alert(typeof(Array));<br>alert(typeof(Object));<br>alert(typeof(new Array()));<br>alert(typeof(new Date()));<br>alert(typeof(new Object()));<br>运行这段代码可以发现：前面4条语句都会显示&#8220;function&#8221;，而后面3条语句则显示&#8220;object&#8221;，可见new一个function实际上是返回一个函数。这与其他的对象有很大的不同。其他的类型Array、Object等都会通过new操作符返回一个普通对象。尽管函数本身也是一个对象，但它与普通的对象还是有区别的，因为它同时也是对象构造器，也就是说，可以new一个函数来返回一个对象，这在前面已经介绍。所有typeof返回 &#8220;function&#8221;的对象都是函数对象。也称这样的对象为构造器（constructor），因而，所有的构造器都是对象，但不是所有的对象都是构造器。<br>既然函数本身也是一个对象，它们的类型是function，联想到C++、Java等面向对象语言的类定义，可以猜测到Function类型的作用所在，那就是可以给函数对象本身定义一些方法和属性，借助于函数的prototype对象，可以很方便地修改和扩充Function类型的定义，例如下面扩展了函数类型Function，为其增加了method1方法，作用是弹出对话框显示"function"：<br>Function.prototype.method1=function(){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert("function");<br>}<br>function func1(a,b,c){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return a+b+c;<br>}<br>func1.method1();<br>func1.method1.method1();<br>注意最后一个语句：func1.method1.mehotd1()，它调用了method1这个函数对象的method1方法。虽然看上去有点容易混淆，但仔细观察一下语法还是很明确的：这是一个递归的定义。因为method1本身也是一个函数，所以它同样具有函数对象的属性和方法，所有对 Function类型的方法扩充都具有这样的递归性质。<br>Function是所有函数对象的基础，而Object则是所有对象（包括函数对象）的基础。在JavaScript中，任何一个对象都是Object的实例，因此，可以修改Object这个类型来让所有的对象具有一些通用的属性和方法，修改 Object类型是通过prototype来完成的：<br>Object.prototype.getType=function(){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return typeof(this);<br>}<br>var array1=new Array();<br>function func1(a,b){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return a+b;<br>}<br>alert(array1.getType());<br>alert(func1.getType());<br>上面的代码为所有的对象添加了getType方法，作用是返回该对象的类型。两条alert语句分别会显示&#8220;object&#8221;和&#8220;function&#8221;。<br><br></font><strong><font size=4>四、&nbsp; 将函数作为参数传递<br></strong></font><font size=2>在前面已经介绍了函数对象本质，每个函数都被表示为一个特殊的对象，可以方便的将其赋值给一个变量，再通过这个变量名进行函数调用。作为一个变量，它可以以参数的形式传递给另一个函数，这在前面介绍JavaScript事件处理机制中已经看到过这样的用法，例如下面的程序将func1作为参数传递给 func2：<br>function func1(theFunc){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; theFunc();<br>}<br>function func2(){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert("ok");<br>}<br>func1(func2);<br>在最后一条语句中，func2作为一个对象传递给了func1的形参theFunc，再由func1内部进行theFunc的调用。事实上，将函数作为参数传递，或者是将函数赋值给其他变量是所有事件机制的基础。<br>例如，如果需要在页面载入时进行一些初始化工作，可以先定义一个init的初始化函数，再通过window.onload=init;语句将其绑定到页面载入完成的事件。这里的init就是一个函数对象，它可以加入window的onload事件列表。<br><br></font><strong><font size=4>五、&nbsp; 传递给函数的隐含参数：arguments<br></strong></font><font size=2>当进行函数调用时，除了指定的参数外，还创建一个隐含的对象——arguments。arguments是一个类似数组但不是数组的对象，说它类似是因为它具有数组一样的访问性质，可以用arguments[index]这样的语法取值，拥有数组长度属性length。arguments对象存储的是实际传递给函数的参数，而不局限于函数声明所定义的参数列表，例如：<br>function func(a,b){<br>&nbsp;&nbsp;&nbsp;&nbsp; alert(a);<br>&nbsp;&nbsp;&nbsp;&nbsp; alert(b);<br>&nbsp;&nbsp;&nbsp;&nbsp; for(var i=0;i&lt;arguments.length;i++){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert(arguments[i]);<br>&nbsp;&nbsp;&nbsp;&nbsp; }<br>}<br>func(1,2,3);<br>代码运行时会依次显示：1，2，1，2，3。因此，在定义函数的时候，即使不指定参数列表，仍然可以通过arguments引用到所获得的参数，这给编程带来了很大的灵活性。arguments对象的另一个属性是callee，它表示对函数对象本身的引用，这有利于实现无名函数的递归或者保证函数的封装性，例如使用递归来计算1到n的自然数之和：<br>var sum=function(n){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(1==n)return 1;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else return n+sum(n-1);<br>}<br>alert(sum(100));<br>其中函数内部包含了对sum自身的调用，然而对于JavaScript来说，函数名仅仅是一个变量名，在函数内部调用sum即相当于调用一个全局变量，不能很好的体现出是调用自身，所以使用arguments.callee属性会是一个较好的办法：<br>var sum=function(n){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(1==n)return 1;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else return n+arguments.callee(n-1);<br>}<br>alert(sum(100));<br>callee属性并不是arguments不同于数组对象的惟一特征，下面的代码说明了arguments不是由Array类型创建：<br>Array.prototype.p1=1;<br>alert(new Array().p1);<br>function func(){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert(arguments.p1);<br>}<br>func();<br>运行代码可以发现，第一个alert语句显示为1，即表示数组对象拥有属性p1，而func调用则显示为&#8220;undefined&#8221;，即p1不是arguments的属性，由此可见，arguments并不是一个数组对象。<br><br></font><strong><font size=4>六、&nbsp; 函数的apply、call方法和length属性<br></strong></font><font size=2>JavaScript为函数对象定义了两个方法：apply和call，它们的作用都是将函数绑定到另外一个对象上去运行，两者仅在定义参数的方式有所区别：<br>Function.prototype.apply(thisArg,argArray);<br>Function.prototype.call(thisArg[,arg1[,arg2&#8230;]]);<br>从函数原型可以看到，第一个参数都被取名为thisArg，即所有函数内部的this指针都会被赋值为thisArg，这就实现了将函数作为另外一个对象的方法运行的目的。两个方法除了thisArg参数，都是为Function对象传递的参数。下面的代码说明了apply和call方法的工作方式：<br>//定义一个函数func1，具有属性p和方法A<br>function func1(){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.p="func1-";<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.A=function(arg){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert(this.p+arg);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>}<br>//定义一个函数func2，具有属性p和方法B<br>function func2(){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.p="func2-";<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.B=function(arg){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert(this.p+arg);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>}<br>var obj1=new func1();<br>var obj2=new func2();<br>obj1.A("byA");&nbsp;&nbsp;&nbsp;&nbsp;//显示func1-byA<br>obj2.B("byB");&nbsp;&nbsp;&nbsp;&nbsp;//显示func2-byB<br>obj1.A.apply(obj2,["byA"]);&nbsp;//显示func2-byA，其中[&#8220;byA&#8221;]是仅有一个元素的数组，下同<br>obj2.B.apply(obj1,["byB"]);&nbsp;//显示func1-byB<br>obj1.A.call(obj2,"byA");&nbsp;&nbsp;//显示func2-byA<br>obj2.B.call(obj1,"byB");&nbsp;&nbsp;//显示func1-byB<br>可以看出，obj1的方法A被绑定到obj2运行后，整个函数A的运行环境就转移到了obj2，即this指针指向了obj2。同样obj2的函数B也可以绑定到obj1对象去运行。代码的最后4行显示了apply和call函数参数形式的区别。<br>与arguments的length属性不同，函数对象还有一个属性length，它表示函数定义时所指定参数的个数，而非调用时实际传递的参数个数。例如下面的代码将显示2：<br>function sum(a,b){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return a+b;<br>}<br>alert(sum.length);<br><br></font><strong><font size=4>七、&nbsp; 深入认识JavaScript中的this指针<br></strong></font><font size=2>this指针是面向对象程序设计中的一项重要概念，它表示当前运行的对象。在实现对象的方法时，可以使用this指针来获得该对象自身的引用。<br>和其他面向对象的语言不同，JavaScript中的this指针是一个动态的变量，一个方法内的this指针并不是始终指向定义该方法的对象的，在上一节讲函数的apply和call方法时已经有过这样的例子。为了方便理解，再来看下面的例子：<br>&lt;script language="JavaScript" type="text/javascript"&gt;<br>&lt;!--<br>//创建两个空对象<br>var obj1=new Object();<br>var obj2=new Object();<br>//给两个对象都添加属性p，并分别等于1和2<br>obj1.p=1;<br>obj2.p=2;<br>//给obj1添加方法，用于显示p的值<br>obj1.getP=function(){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert(this.p);&nbsp;//表面上this指针指向的是obj1<br>}<br>//调用obj1的getP方法<br>obj1.getP();<br>//使obj2的getP方法等于obj1的getP方法<br>obj2.getP=obj1.getP;<br>//调用obj2的getP方法<br>obj2.getP();<br>//--&gt;<br>&lt;/script&gt;<br>从代码的执行结果看，分别弹出对话框显示1和2。由此可见，getP函数仅定义了一次，在不同的场合运行，显示了不同的运行结果，这是有this指针的变化所决定的。在obj1的getP方法中，this就指向了obj1对象，而在obj2的getP方法中，this就指向了obj2对象，并通过this指针引用到了两个对象都具有的属性p。<br>由此可见，JavaScript中的this指针是一个动态变化的变量，它表明了当前运行该函数的对象。由 this指针的性质，也可以更好的理解JavaScript中对象的本质：一个对象就是由一个或多个属性（方法）组成的集合。每个集合元素不是仅能属于一个集合，而是可以动态的属于多个集合。这样，一个方法（集合元素）由谁调用，this指针就指向谁。实际上，前面介绍的apply方法和call方法都是通过强制改变this指针的值来实现的，使this指针指向参数所指定的对象，从而达到将一个对象的方法作为另一个对象的方法运行。<br>每个对象集合的元素（即属性或方法）也是一个独立的部分，全局函数和作为一个对象方法定义的函数之间没有任何区别，因为可以把全局函数和变量看作为window对象的方法和属性。也可以使用new操作符来操作一个对象的方法来返回一个对象，这样一个对象的方法也就可以定义为类的形式，其中的this指针则会指向新创建的对象。在后面可以看到，这时对象名可以起到一个命名空间的作用，这是使用JavaScript进行面向对象程序设计的一个技巧。例如：<br>var namespace1=new Object();<br>namespace1.class1=function(){<br>&nbsp;&nbsp;&nbsp;&nbsp; //初始化对象的代码<br>}<br>var obj1=new namespace1.class1();<br>这里就可以把namespace1看成一个命名空间。<br>由于对象属性（方法）的动态变化特性，一个对象的两个属性（方法）之间的互相引用，必须要通过this指针，而其他语言中，this关键字是可以省略的。如上面的例子中：<br>obj1.getP=function(){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert(this.p);&nbsp;//表面上this指针指向的是obj1<br>}<br>这里的this关键字是不可省略的，即不能写成alert(p)的形式。这将使得getP函数去引用上下文环境中的p变量，而不是obj1的属性。</font>
<img src ="http://www.blogjava.net/zhuyan/aggbug/119901.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhuyan/" target="_blank">朱岩</a> 2007-05-25 10:04 <a href="http://www.blogjava.net/zhuyan/articles/119901.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用层模拟的小窗口(可拖动展合)</title><link>http://www.blogjava.net/zhuyan/articles/119363.html</link><dc:creator>朱岩</dc:creator><author>朱岩</author><pubDate>Wed, 23 May 2007 03:55:00 GMT</pubDate><guid>http://www.blogjava.net/zhuyan/articles/119363.html</guid><wfw:comment>http://www.blogjava.net/zhuyan/comments/119363.html</wfw:comment><comments>http://www.blogjava.net/zhuyan/articles/119363.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhuyan/comments/commentRss/119363.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhuyan/services/trackbacks/119363.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;1&lt;html&gt;&nbsp;&nbsp;2&lt;head&gt;&nbsp;&nbsp;3&lt;title&gt;网页特效---用层模拟的小窗口(可拖动展合)&lt;/title&gt;&nbsp;&nbsp;4&lt;meta&nbsp;http-equiv="Content-Type"&nbsp;content="text/html;&nbsp;chars...&nbsp;&nbsp;<a href='http://www.blogjava.net/zhuyan/articles/119363.html'>阅读全文</a><img src ="http://www.blogjava.net/zhuyan/aggbug/119363.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhuyan/" target="_blank">朱岩</a> 2007-05-23 11:55 <a href="http://www.blogjava.net/zhuyan/articles/119363.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Javascript----文件操作</title><link>http://www.blogjava.net/zhuyan/articles/119153.html</link><dc:creator>朱岩</dc:creator><author>朱岩</author><pubDate>Tue, 22 May 2007 08:28:00 GMT</pubDate><guid>http://www.blogjava.net/zhuyan/articles/119153.html</guid><wfw:comment>http://www.blogjava.net/zhuyan/comments/119153.html</wfw:comment><comments>http://www.blogjava.net/zhuyan/articles/119153.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhuyan/comments/commentRss/119153.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhuyan/services/trackbacks/119153.html</trackback:ping><description><![CDATA[<p>一、功能实现核心：FileSystemObject&nbsp;对象&nbsp;<br>&nbsp;&nbsp;&nbsp; 要在javascript中实现文件操作功能，主要就是依靠FileSystemobject对象。<br>二、FileSystemObject编程&nbsp;<br>使用FileSystemObject&nbsp;对象进行编程很简单，一般要经过如下的步骤：&nbsp;创建FileSystemObject对象、应用相关方法、访问对象相关属性&nbsp;。&nbsp;<br>（一）创建FileSystemObject对象&nbsp;<br>创建FileSystemObject对象的代码只要1行：&nbsp;<br>var&nbsp;fso&nbsp;=&nbsp;new&nbsp;ActiveXObject("Scripting.FileSystemObject");&nbsp;<br>上述代码执行后，fso就成为一个FileSystemObject对象实例。&nbsp;<br>（二）应用相关方法&nbsp;<br>创建对象实例后，就可以使用对象的相关方法了。比如，使用CreateTextFile方法创建一个文本文件：&nbsp;<br>var&nbsp;fso&nbsp;=&nbsp;new&nbsp;ActiveXObject("Scripting.FileSystemObject");&nbsp;<br>var&nbsp;f1&nbsp;=&nbsp;fso.createtextfile("c:\\myjstest.txt",true");&nbsp;<br>（三）访问对象相关属性&nbsp;<br>要访问对象的相关属性，首先要建立指向对象的句柄，这就要通过get系列方法实现：GetDrive负责获取驱动器信息，GetFolder负责获取文件夹信息，GetFile负责获取文件信息。比如，指向下面的代码后，f1就成为指向文件c:\test.txt的句柄：&nbsp;<br>var&nbsp;fso&nbsp;=&nbsp;new&nbsp;ActiveXObject("Scripting.FileSystemObject");&nbsp;<br>var&nbsp;f1&nbsp;=&nbsp;fso.GetFile("c:\\myjstest.txt");&nbsp;<br>然后，使用f1访问对象的相关属性。比如：&nbsp;<br>var&nbsp;fso&nbsp;=&nbsp;new&nbsp;ActiveXObject("Scripting.FileSystemObject");&nbsp;<br>var&nbsp;f1&nbsp;=&nbsp;fso.GetFile("c:\\myjstest.txt");&nbsp;<br>alert("File&nbsp;last&nbsp;modified:&nbsp;"&nbsp;+&nbsp;f1.DateLastModified);&nbsp;<br>执行上面最后一句后，将显示c:\myjstest.txt的最后修改日期属性值。&nbsp;<br>但有一点请注意：对于使用create方法建立的对象，就不必再使用get方法获取对象句柄了，这时直接使用create方法建立的句柄名称就可以：&nbsp;<br>var&nbsp;fso&nbsp;=&nbsp;new&nbsp;ActiveXObject("Scripting.FileSystemObject");&nbsp;<br>var&nbsp;f1&nbsp;=&nbsp;fso.createtextfile("c:\\myjstest.txt",true");&nbsp;<br>alert("File&nbsp;last&nbsp;modified:&nbsp;"&nbsp;+&nbsp;f1.DateLastModified);&nbsp;<br>三、操作驱动器（Drives）&nbsp;<br>使用FileSystemObject对象来编程操作驱动器（Drives）和文件夹（Folders）很容易，这就象在Windows文件浏览器中对文件进行交互操作一样，比如：拷贝、移动文件夹，获取文件夹的属性。&nbsp;<br>（一）Drives对象属性&nbsp;<br>Drive对象负责收集系统中的物理或逻辑驱动器资源内容，它具有如下属性：&nbsp;<br>l&nbsp;TotalSize：以字节（byte）为单位计算的驱动器大小。&nbsp;<br>l&nbsp;AvailableSpace或FreeSpace：以字节（byte）为单位计算的驱动器可用空间。&nbsp;<br>l&nbsp;DriveLetter：驱动器字母。&nbsp;<br>l&nbsp;DriveType：驱动器类型，取值为：removable（移动介质）、fixed（固定介质）、network（网络资源）、CD-ROM或者RAM盘。&nbsp;<br>l&nbsp;SerialNumber：驱动器的系列码。&nbsp;<br>l&nbsp;FileSystem：所在驱动器的文件系统类型，取值为FAT、FAT32和NTFS。&nbsp;<br>l&nbsp;IsReady：驱动器是否可用。&nbsp;<br>l&nbsp;ShareName：共享名称。&nbsp;<br>l&nbsp;VolumeName：卷标名称。&nbsp;<br>l&nbsp;Path和RootFolder：驱动器的路径或者根目录名称。&nbsp;<br>（二）Drive对象操作例程&nbsp;<br>下面的例程显示驱动器C的卷标、总容量和可用空间等信息：&nbsp;<br>var&nbsp;fso,&nbsp;drv,&nbsp;s&nbsp;="";&nbsp;<br>fso&nbsp;=&nbsp;new&nbsp;ActiveXObject("Scripting.FileSystemObject");&nbsp;<br>drv&nbsp;=&nbsp;fso.GetDrive(fso.GetDriveName("c:\\"));&nbsp;<br>s&nbsp;+=&nbsp;"Drive&nbsp;C:"&nbsp;+&nbsp;"&nbsp;-&nbsp;";&nbsp;<br>s&nbsp;+=&nbsp;drv.VolumeName&nbsp;+&nbsp;"\n";&nbsp;<br>s&nbsp;+=&nbsp;"Total&nbsp;Space:&nbsp;"&nbsp;+&nbsp;drv.TotalSize&nbsp;/&nbsp;1024;&nbsp;<br>s&nbsp;+=&nbsp;"&nbsp;Kb"&nbsp;+&nbsp;"\n";&nbsp;<br>s&nbsp;+=&nbsp;"Free&nbsp;Space:&nbsp;"&nbsp;+&nbsp;drv.FreeSpace&nbsp;/&nbsp;1024;&nbsp;<br>s&nbsp;+=&nbsp;"&nbsp;Kb"&nbsp;+&nbsp;"\n";&nbsp;<br>alert(s);&nbsp;<br>四、操作文件夹（Folders）&nbsp;<br>涉及到文件夹的操作包括创建、移动、删除以及获取相关属性。&nbsp;<br>Folder对象操作例程&nbsp;:<br>下面的例程将练习获取父文件夹名称、创建文件夹、删除文件夹、判断是否为根目录等操作：&nbsp;<br>var&nbsp;fso,&nbsp;fldr,&nbsp;s&nbsp;=&nbsp;"";&nbsp;<br>//&nbsp;创建FileSystemObject对象实例&nbsp;<br>fso&nbsp;=&nbsp;new&nbsp;ActiveXObject("Scripting.FileSystemObject");&nbsp;<br>//&nbsp;获取Drive&nbsp;对象&nbsp;<br>fldr&nbsp;=&nbsp;fso.GetFolder("c:\\");&nbsp;<br>//&nbsp;显示父目录名称&nbsp;<br>alert("Parent&nbsp;folder&nbsp;name&nbsp;is:&nbsp;"&nbsp;+&nbsp;fldr&nbsp;+&nbsp;"\n");&nbsp;<br>//&nbsp;显示所在drive名称&nbsp;<br>alert("Contained&nbsp;on&nbsp;drive&nbsp;"&nbsp;+&nbsp;fldr.Drive&nbsp;+&nbsp;"\n");&nbsp;<br>//&nbsp;判断是否为根目录&nbsp;<br>if&nbsp;(fldr.IsRootFolder)&nbsp;<br>alert("This&nbsp;is&nbsp;the&nbsp;root&nbsp;folder.");&nbsp;<br>else&nbsp;<br>alert("This&nbsp;folder&nbsp;isn't&nbsp;a&nbsp;root&nbsp;folder.");&nbsp;<br>alert("\n\n");&nbsp;<br>//&nbsp;创建新文件夹&nbsp;<br>fso.CreateFolder&nbsp;("C:\\Bogus");&nbsp;<br>alert("Created&nbsp;folder&nbsp;C:\\Bogus"&nbsp;+&nbsp;"\n");&nbsp;<br>//&nbsp;显示文件夹基础名称，不包含路径名&nbsp;<br>alert("Basename&nbsp;=&nbsp;"&nbsp;+&nbsp;fso.GetBaseName("c:\\bogus")&nbsp;+&nbsp;"\n");&nbsp;<br>//&nbsp;删除创建的文件夹&nbsp;<br>fso.DeleteFolder&nbsp;("C:\\Bogus");&nbsp;<br>alert("Deleted&nbsp;folder&nbsp;C:\\Bogus"&nbsp;+&nbsp;"\n");&nbsp;<br>五、操作文件（Files）&nbsp;<br>对文件进行的操作要比以上介绍的驱动器（Drive）和文件夹（Folder）操作复杂些，基本上分为以下两个类别：对文件的创建、拷贝、移动、删除操作和对文件内容的创建、添加、删除和读取操作。下面分别详细介绍。&nbsp;<br>（一）创建文件&nbsp;<br>一共有3种方法可用于创建一个空文本文件，这种文件有时候也叫做文本流（text&nbsp;stream）。&nbsp;<br>第一种是使用CreateTextFile方法。代码如下：&nbsp;<br>var&nbsp;fso,&nbsp;f1;&nbsp;<br>fso&nbsp;=&nbsp;new&nbsp;ActiveXObject("Scripting.FileSystemObject");&nbsp;<br>f1&nbsp;=&nbsp;fso.CreateTextFile("c:\\testfile.txt",&nbsp;true);&nbsp;<br>第二种是使用OpenTextFile方法，并添加上ForWriting属性，ForWriting的值为2。代码如下：&nbsp;<br>var&nbsp;fso,&nbsp;ts;&nbsp;<br>var&nbsp;ForWriting=&nbsp;2;&nbsp;<br>fso&nbsp;=&nbsp;new&nbsp;ActiveXObject("Scripting.FileSystemObject");&nbsp;<br>ts&nbsp;=&nbsp;fso.OpenTextFile("c:\\test.txt",&nbsp;ForWriting,&nbsp;true);&nbsp;<br>第三种是使用OpenAsTextStream方法，同样要设置好ForWriting属性。代码如下：&nbsp;<br>var&nbsp;fso,&nbsp;f1,&nbsp;ts;&nbsp;<br>var&nbsp;ForWriting&nbsp;=&nbsp;2;&nbsp;<br>fso&nbsp;=&nbsp;new&nbsp;ActiveXObject("Scripting.FileSystemObject");&nbsp;<br>fso.CreateTextFile&nbsp;("c:\\test1.txt");&nbsp;<br>f1&nbsp;=&nbsp;fso.GetFile("c:\\test1.txt");&nbsp;<br>ts&nbsp;=&nbsp;f1.OpenAsTextStream(ForWriting,&nbsp;true);&nbsp;<br>（二）添加数据到文件&nbsp;<br>当文件被创建后，一般要按照&#8220;打开文件－&gt;填写数据－&gt;关闭文件&#8221;的步骤实现添加数据到文件的目的。&nbsp;<br>打开文件可使用FileSystemObject对象的OpenTextFile方法，或者使用File对象的OpenAsTextStream方法。&nbsp;<br>填写数据要使用到TextStream对象的Write、WriteLine或者WriteBlankLines方法。在同是实现写入数据的功能下，这3者的区别在于：Write方法不在写入数据末尾添加新换行符，WriteLine方法要在最后添加一个新换行符，而WriteBlankLines则增加一个或者多个空行。&nbsp;<br>关闭文件可使用TextStream对象的Close方法。&nbsp;<br>（三）创建文件及添加数据例程&nbsp;<br>下面的代码将创建文件、添加数据、关闭文件几个步骤结合起来进行应用：&nbsp;<br>var&nbsp;fso,&nbsp;tf;&nbsp;<br>fso&nbsp;=&nbsp;new&nbsp;ActiveXObject("Scripting.FileSystemObject");&nbsp;<br>//&nbsp;创建新文件&nbsp;<br>tf&nbsp;=&nbsp;fso.CreateTextFile("c:\\testfile.txt",&nbsp;true);&nbsp;<br>//&nbsp;填写数据，并增加换行符&nbsp;<br>tf.WriteLine("Testing&nbsp;1,&nbsp;2,&nbsp;3.")&nbsp;;&nbsp;<br>//&nbsp;增加3个空行&nbsp;<br>tf.WriteBlankLines(3)&nbsp;;&nbsp;<br>//&nbsp;填写一行，不带换行符&nbsp;<br>tf.Write&nbsp;("This&nbsp;is&nbsp;a&nbsp;test.");&nbsp;<br>//&nbsp;关闭文件&nbsp;<br>tf.Close();&nbsp;<br>（四）读取文件内容&nbsp;<br>从文本文件中读取数据要使用TextStream对象的Read、ReadLine或ReadAll&nbsp;方法。Read方法用于读取文件中指定数量的字符； ReadLine方法读取一整行，但不包括换行符；ReadAll方法则读取文本文件的整个内容。读取的内容存放于字符串变量中，用于显示、分析。</p>
<p>&nbsp;</p>
<p>方法或者属性 描述 <br>BuildPath() <br>&nbsp;生成一个文件路径 <br>CopyFile()&nbsp; 复制文件 <br>CopyFolder() 复制目录 <br>CreateFolder()&nbsp; 创建新目录 <br>CreateTextFile()&nbsp; 生成一个文件 <br>DeleteFile()&nbsp; 删除一个文件 <br>DeleteFolder()&nbsp; 删除一个目录 <br>DriveExists()&nbsp; 检验盘符是否存在 <br>Drives 返回盘符的集合 <br>FileExists()&nbsp; 检验文件是否存在 <br>FolderExists 检验一个目录是否存在 <br>GetAbsolutePathName()&nbsp; 取得一个文件的绝对路径 <br>GetBaseName()&nbsp; 取得文件名 <br>GetDrive()&nbsp; 取得盘符名 <br>GetDriveName()&nbsp; 取得盘符名 <br>GetExtensionName()&nbsp; 取得文件的后缀 <br>GetFile()&nbsp; 生成文件对象 <br>GetFileName()&nbsp; 取得文件名 <br>GetFolder()&nbsp; 取得目录对象 <br>GetParentFolderName 取得文件或目录的父目录名 <br>GetSpecialFolder()&nbsp; 取得特殊的目录名 <br>GetTempName()&nbsp; 生成一个临时文件对象 <br>MoveFile()&nbsp; 移动文件 <br>MoveFolder()&nbsp; 移动目录 <br>OpenTextFile()&nbsp; 打开一个文件流</p>
<p><br>f.Files&nbsp;//目录下所有文件集合<br>f.attributes //文件属性<br>&nbsp;&nbsp;Case 0 Str="普通文件。没有设置任何属性。 "<br>&nbsp;&nbsp;Case 1 Str="只读文件。可读写。 "<br>&nbsp;&nbsp;Case 2 Str="隐藏文件。可读写。 "<br>&nbsp;&nbsp;Case 4 Str="系统文件。可读写。 "<br>&nbsp;&nbsp;Case 16 Str="文件夹或目录。只读。 "<br>&nbsp;&nbsp;Case 32 Str="上次备份后已更改的文件。可读写。 " <br>&nbsp;&nbsp;Case 1024 Str="链接或快捷方式。只读。 "<br>&nbsp;&nbsp;Case 2048 Str=" 压缩文件。只读。"<br>f.Datecreated // 创建时间<br>f.DateLastAccessed //上次访问时间<br>f.DateLastModified // 上次修改时间<br>f.Path //文件路径<br>f.Name //文件名称<br>f.Type //文件类型<br>f.Size // 文件大小（单位：字节）<br>f.ParentFolder //父目录<br>f.RootFolder // 根目录 </p>
<p>&nbsp;实例说明</p>
<p>BuildPath(路径,文件名) //这个方法会对给定的路径加上文件，并自动加上分界符 <br>&lt;SCRIPT LANGUAGE="JavaScript"&gt;<br>&lt;!--<br>var fso = new ActiveXObject("Scripting.FileSystemObject");<br>var newpath = fso.BuildPath("c:\\tmp", "51js.txt"); //生成 c:\tmp\51js.txt的路径<br>alert(newpath);<br>--&gt;<br>&lt;/SCRIPT&gt; </p>
<p>CopyFile(源文件, 目标文件, 覆盖) //复制源文件到目标文件，当覆盖值为true时，如果目标文件存在会把文件覆盖 <br>&lt;SCRIPT LANGUAGE="JavaScript"&gt;<br>&lt;!--<br>var fso = new ActiveXObject("Scripting.FileSystemObject");<br>var newpath = fso.CopyFile("c:\\autoexec.bat", "d:\\autoexec.bak");<br>--&gt;<br>&lt;/SCRIPT&gt; </p>
<p>CopyFolder(对象目录,目标目录 ,覆盖) //复制对象目录到目标目录，当覆盖为true时，如果目标目录存在会把文件覆盖 <br>&lt;SCRIPT LANGUAGE="JavaScript"&gt;<br>&lt;!--<br>var fso = new ActiveXObject("Scripting.FileSystemObject");<br>fso.CopyFolder("c:\\WINDOWS\\Desktop", "d:\\"); //把C盘的Desktop目录复制到D盘的根目录<br>--&gt;<br>&lt;/SCRIPT&gt; </p>
<p>CreateFolder(目录名) //创建一个新的目录 <br>&lt;SCRIPT LANGUAGE="JavaScript"&gt;<br>&lt;!--<br>var fso = new ActiveXObject("Scripting.FileSystemObject");<br>var newFolderName = fso.CreateFolder("c:\\51JS"); //在C盘上创建一个51JS的目录 <br>--&gt;<br>&lt;/SCRIPT&gt; </p>
<p>CreateTextFile(文件名, 覆盖) //创建一个新的文件，如果此文件已经存在，你需要把覆盖值定为true <br>&lt;SCRIPT LANGUAGE="JavaScript"&gt;<br>&lt;!--<br>var fso = new ActiveXObject("Scripting.FileSystemObject");<br>var newFileObject = fso.CreateTextFile("c:\\autoexec51JS.bat", true); //脚本将在C盘创建一个叫 autoexec51JS.bat的文件<br>--&gt;<br>&lt;/SCRIPT&gt; </p>
<p>DeleteFile(文件名, 只读？) //删除一个文件，如果文件的属性是只读的话，你需要把只读值设为true <br>&lt;SCRIPT LANGUAGE="JavaScript"&gt;<br>&lt;!--<br>var fso = new ActiveXObject("Scripting.FileSystemObject"); //为了安全我先把要删除的autoexec.bat备份到你的D盘<br>var newpath = fso.CopyFile("c:\\autoexec.bat", "d:\\autoexec.bat"); //把C盘的autoexec.bat文件删除掉 <br>fso.DeleteFile("c:\\autoexec.bat", true);<br>--&gt;<br>&lt;/SCRIPT&gt; </p>
<p>DeleteFolder(文件名, 只读？)//删除一个目录，如果目录的属性是只读的话，你需要把只读值设为true <br>&lt;SCRIPT LANGUAGE="JavaScript"&gt;<br>&lt;!--<br>var fso = new ActiveXObject("Scripting.FileSystemObject");<br>fso.CopyFolder("c:\\WINDOWS\\Desktop", "d:\\"); //为了安全我先把你C盘的Desktop目录复制到你D盘的根目录<br>fso.DeleteFolder("c:\\WINDOWS\\Desktop", true); //把你的Desktop目录删除，但因为desktop是系统的东西，所以不能全部删除，但.........<br>--&gt;<br>&lt;/SCRIPT&gt; </p>
<p>DriveExists(盘符) //检查一个盘是否存在，如果存在就返会真，不存在就返回....... <br>&lt;SCRIPT LANGUAGE="JavaScript"&gt;<br>&lt;!--<br>var fso = new ActiveXObject("Scripting.FileSystemObject");<br>hasDriveD = fso.DriveExists("d"); //检查系统是否有D盘存在<br>hasDriveZ = fso.DriveExists("z"); //检查系统是否有Z盘存在<br>if (hasDriveD) alert("你的系统内有一个D盘");<br>if (!hasDriveZ) alert("你的系统内没有Z盘");<br>--&gt;<br>&lt;/SCRIPT&gt; </p>
<p>FileExists(文件名) //检查一个文件是否存在，如果存在就返会真，不存在就返回....... <br>&lt;SCRIPT LANGUAGE="JavaScript"&gt;<br>&lt;!--<br>var fso = new ActiveXObject("Scripting.FileSystemObject");<br>fileName = fso.FileExists("c:\\autoexec.bat");<br>if (fileName) alert("你在C盘中有autoexec.bat文件，按下确定后这个文件将被删除！"); //开个玩笑:) <br>--&gt;<br>&lt;/SCRIPT&gt; </p>
<p>FolderExists(目录名) //检查一个目录是否存在，如果存在就返会真，不存在就返回....... <br>&lt;SCRIPT LANGUAGE="JavaScript"&gt;<br>&lt;!--<br>var fso = new ActiveXObject("Scripting.FileSystemObject");<br>folderName = fso.FolderExists("c:\\WINDOWS\\Fonts");<br>if (folderName) alert("按下确定后系统的字库将被删除！"); //开个玩笑:) <br>--&gt;<br>&lt;/SCRIPT&gt; </p>
<p>GetAbsolutePathName(文件对象) //返回文件对象在系统的绝对路径 <br>&lt;SCRIPT LANGUAGE="JavaScript"&gt;<br>&lt;!--<br>var fso = new ActiveXObject("Scripting.FileSystemObject");<br>pathName = fso.GetAbsolutePathName("c:\\autoexec.bat"); <br>alert(pathName);<br>--&gt;<br>&lt;/SCRIPT&gt; </p>
<p>GetBaseName(文件对象) //返回文件对象的文件名 <br>&lt;SCRIPT LANGUAGE="JavaScript"&gt;<br>&lt;!--<br>var fso = new ActiveXObject("Scripting.FileSystemObject");<br>baseName = fso.GetBaseName("c:\\autoexec.bat"); //取得autoexec.bat的文件名autoexec<br>alert(baseName);<br>--&gt;<br>&lt;/SCRIPT&gt; </p>
<p>GetExtensionName(文件对象) //文件的后缀 <br>&lt;SCRIPT LANGUAGE="JavaScript"&gt;<br>&lt;!--<br>var fso = new ActiveXObject("Scripting.FileSystemObject");<br>exName = fso.GetExtensionName("c:\\autoexec.bat"); //取得autoexec.bat后缀bat<br>alert(exName);<br>--&gt;<br>&lt;/SCRIPT&gt; </p>
<p>GetParentFolderName(文件对象) //取得父级的目录名 <br>&lt;SCRIPT LANGUAGE="JavaScript"&gt;<br>&lt;!--<br>var fso = new ActiveXObject("Scripting.FileSystemObject");<br>parentName = fso.GetParentFolderName("c:\\autoexec.bat"); //取得autoexec.bat的父级目录C盘<br>alert(parentName);<br>--&gt;<br>&lt;/SCRIPT&gt; </p>
<p>GetSpecialFolder(目录代码) //取得系统中一些特别的目录的路径，目录代码有3个分别是 0:安装Window的目录 1:系统文件目录 2:临时文件目录 <br>&lt;SCRIPT LANGUAGE="JavaScript"&gt;<br>&lt;!--<br>var fso = new ActiveXObject("Scripting.FileSystemObject");<br>tmpFolder = fso.GetSpecialFolder(2); //取得系统临时文件目录的路径 如我的是 C:\windows\temp<br>alert(tmpFolder);<br>--&gt;<br>&lt;/SCRIPT&gt; </p>
<p>GetTempName() //生成一个随机的临时文件对象，会以rad带头后面跟着些随机数，就好象一些软件在安装时会生成*.tmp <br>&lt;SCRIPT LANGUAGE="JavaScript"&gt;<br>&lt;!--<br>var fso = new ActiveXObject("Scripting.FileSystemObject");<br>tmpName = fso.GetTempName(); //我在测试时就生成了radDB70E.tmp<br>alert(tmpName);<br>--&gt;<br>&lt;/SCRIPT&gt; </p>
<p>MoveFile(源文件, 目标文件) //把源文件移到目标文件的位置 <br>&lt;SCRIPT LANGUAGE="JavaScript"&gt;<br>&lt;!--<br>var fso = new ActiveXObject("Scripting.FileSystemObject");<br>var newpath = fso.MoveFile("c:\\autoexec.bat", "d:\\autoexec.bat"); //把C盘的autoexec.bat文件移移动到D盘<br>--&gt;<br>&lt;/SCRIPT&gt; </p>
<img src ="http://www.blogjava.net/zhuyan/aggbug/119153.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhuyan/" target="_blank">朱岩</a> 2007-05-22 16:28 <a href="http://www.blogjava.net/zhuyan/articles/119153.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JS脚本加密方法</title><link>http://www.blogjava.net/zhuyan/articles/109209.html</link><dc:creator>朱岩</dc:creator><author>朱岩</author><pubDate>Sun, 08 Apr 2007 02:58:00 GMT</pubDate><guid>http://www.blogjava.net/zhuyan/articles/109209.html</guid><wfw:comment>http://www.blogjava.net/zhuyan/comments/109209.html</wfw:comment><comments>http://www.blogjava.net/zhuyan/articles/109209.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhuyan/comments/commentRss/109209.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhuyan/services/trackbacks/109209.html</trackback:ping><description><![CDATA[JS脚本加密方法<br>本文一共介绍了七种方法：<br>一：最简单的加密解密<br>二：转义字符"\"的妙用<br>三：使用Microsoft出品的脚本编码器Script&nbsp;Encoder来进行编码&nbsp;（自创简单解码）<br>四：任意添加NUL空字符（十六进制00H）&nbsp;（自创）<br>五：无用内容混乱以及换行空格TAB大法<br>六：自写解密函数法<br>七：错误的利用&nbsp;（自创）<br><br><br>　　在做网页时（其实是网页木马呵呵），最让人烦恼的是自己辛辛苦苦写出来的客户端IE运行的JAVASCRIPT代码常常被别人轻易的拷贝，实在让自己的心里有点不是滋味，要知道自己写点东西也挺累的......^*^<br><br>　　但我们也应该清楚地认识到因为JAVASCRIPT代码是在IE中解释执行，要想绝对的保密是不可能的，我们要做的就是尽可能的增大拷贝者复制的难度，让他知难而退（但愿~!~），下面我结合自己这几年来的实践，及个人研究的心得，和大家一起来探讨一下网页中JAVASCRIPT代码的加密解密<a class=channel_keylink href="http://www.3800hk.com/"><font color=#000000><u>技术</u></font></a>。<br><br>　　以加密下面的JAVASCRIPT代码为例：<br>&lt;SCRIPT&nbsp;LANGUAGE="JavaScript"&gt;<br>alert("《<a class=channel_keylink href="http://www.3800hk.com/"><font color=#000000><u>黑客</u></font></a>防线》");<br>&lt;/SCRIPT&gt;<br><br>　　一：最简单的加密解密<br><br>　　大家对于JAVASCRIPT函数escape()和unescape()想必是比较了解啦（很多网页加密在用它们），分别是编码和解码字符串，比如例子代码用escape()函数加密后变为如下格式：<br>alert%28%22%u9ED1%u5BA2%u9632%u7EBF%22%29%3B<br>&nbsp;<br><br>如何？还看的懂吗？当然其中的ASCII字符"alert"并没有被加密，如果愿意我们可以写点JAVASCRIPT代码重新把它加密如下：<br>%61%6C%65%72%74%28%22%u9ED1%u5BA2%u9632%u7EBF%22%29%3B<br>&nbsp;<br><br>呵呵！如何？这次是完全都加密了！<br><br>当然，这样加密后的代码是不能直接运行的，幸好还有eval(codeString)可用，这个函数的作用就是检查JavaScript代码并执行，必选项&nbsp;codeString&nbsp;参数是包含有效&nbsp;JavaScript&nbsp;代码的字符串值，加上上面的解码unescape()，加密后的结果如下：<br>&lt;SCRIPT&nbsp;LANGUAGE="JavaScript"&gt;<br>var&nbsp;code=unescape("%61%6C%65%72%74%28%22%u9ED1%u5BA2%u9632%u7EBF%22%29%3B");<br>eval(code)<br>&lt;/SCRIPT&gt;<br>&nbsp;<br><br>是不是很简单？不要高兴，解密也就同样的简单，解密代码都摆给别人啦（unescape()）！呵呵<br><br>　　二：转义字符"\"的妙用<br><br>　　大家可能对转义字符"\"不太熟悉，但对于JavaScript提供了一些特殊字符如：\n&nbsp;（换行）、&nbsp;\r&nbsp;（回车）、\'&nbsp;（单引号&nbsp;）等应该是有所了解的吧？其实"\"后面还可以跟八进制或十六进制的数字，如字符"a"则可以表示为："\141"或"\x61"（注意是小写字符"x"），至于双字节字符如汉字"黑"则仅能用十六进制表示为"\u9ED1"（注意是小写字符"u"），其中字符"u"表示是双字节字符，根据这个原理例子代码则可以表示为：<br><br>八进制转义字符串如下:<br>&lt;SCRIPT&nbsp;LANGUAGE="JavaScript"&gt;<br>eval("\141\154\145\162\164\50\42\u9ED1\u5BA2\u9632\u7EBF\42\51\73")<br>&lt;/SCRIPT&gt;<br>&nbsp;<br><br>十六进制转义字符串如下:<br>&lt;SCRIPT&nbsp;LANGUAGE="JavaScript"&gt;<br>eval("\x61\x6C\x65\x72\x74\x28\x22\u9ED1\u5BA2\u9632\u7EBF\x22\x29\x3B")<br>&lt;/SCRIPT&gt;<br>&nbsp;<br><br>　　这次没有了解码函数，因为JavaScript执行时会自行转换，同样解码也是很简单如下：<br>&lt;SCRIPT&nbsp;LANGUAGE="JavaScript"&gt;<br>alert("\x61\x6C\x65\x72\x74\x28\x22\u9ED1\u5BA2\u9632\u7EBF\x22\x29\x3B")<br>&lt;/SCRIPT&gt;<br>&nbsp;<br>就会弹出对话框告诉你解密后的结果！三：使用Microsoft出品的脚本编码器Script&nbsp;Encoder来进行编码<br><br>　　工具的使用就不多介绍啦！我是直接使用JavaScript调用控件Scripting.Encoder完成的编码！代码如下：<br>&lt;SCRIPT&nbsp;LANGUAGE="JavaScript"&gt;<br>var&nbsp;Senc=new&nbsp;ActiveXObject("Scripting.Encoder");<br>var&nbsp;code='&lt;SCRIPT&nbsp;LANGUAGE="JavaScript"&gt;\r\nalert("《<a class=channel_keylink href="http://www.3800hk.com/"><font color=#000000><u>黑客</u></font></a>防线》");\r\n&lt;\/SCRIPT&gt;';<br>var&nbsp;Encode=Senc.EncodeScriptFile(".htm",code,0,"");<br>alert(Encode);<br>&lt;/SCRIPT&gt;<br>&nbsp;<br>编码后的结果如下：<br>&lt;SCRIPT&nbsp;LANGUAGE="JScript.Encode"&gt;#@~^FgAAAA==@#@&amp;ls DD`J<a class=channel_keylink href="http://www.3800hk.com/"><font color=#000000><u>黑客</u></font></a>防线r#p@#@&amp;FgMAAA==^#~@&lt;/SCRIPT&gt;<br>&nbsp;<br>够难看懂得吧？但相应的解密工具早已出来，而且连解密网页都有！因为其解密网页代码过多，我就不多说拉！给大家介绍一下我独创的解密代码，如下：<br>&lt;SCRIPT&nbsp;LANGUAGE="JScript.Encode"&gt;<br>function&nbsp;decode(){<br>#@~^FgAAAA==@#@&amp;ls DD`J<a class=channel_keylink href="http://www.3800hk.com/"><font color=#000000><u>黑客</u></font></a>防线r#p@#@&amp;FgMAAA==^#~@<br>}<br>alert(decode.toString());<br>&lt;/SCRIPT&gt;<br>&nbsp;<br>咋样？够简单吧？它是原理是：编码后的代码运行前IE会先对其进行解码，如果我们先把加密的代码放入一个自定义函数如上面的decode()中，然后对自定义函数decode调用toString()方法，得到的将是解码后的代码！<br><br>如果你觉得这样编码得到的代码LANGUAGE属性是JScript.Encode，很容易让人识破，那么还有一个几乎不为人知的window对象的方法execScript()，其原形为：<br>window.execScript(&nbsp;sExpression,&nbsp;sLanguage&nbsp;)&nbsp;<br>&nbsp;<br><br>参数：<br>sExpression: &nbsp;必选项。字符串(String)。要被执行的代码。<br>sLanguage　: &nbsp;必选项。字符串(String)。指定执行的代码的语言。默认值为&nbsp;Microsoft&nbsp;JScript<br><br>使用时，前面的"window"可以省略不写！<br><br>利用它我们可以很好的运行编码后的JavaScript代码，如下：<br>&lt;SCRIPT&nbsp;LANGUAGE="JavaScript"&gt;<br>execScript("#@~^FgAAAA==@#@&amp;ls DD`J<a class=channel_keylink href="http://www.3800hk.com/"><font color=#000000><u>黑客</u></font></a>防线r#p@#@&amp;FgMAAA==^#~@","JScript.Encode")<br>&lt;/SCRIPT&gt;<br>&nbsp;<br><br>你可以利用方法二对其中的""号内的字符串再进行编码，使得"JScript.Encode"以及编码特征码"#@~^"不出现，效果会更好！<br>四：任意添加NUL空字符（十六进制00H）<br><br>　　一次偶然的实验，使我发现在HTML网页中任意位置添加任意个数的"空字符"，IE照样会正常显示其中的内容，并正常执行其中的JavaScript&nbsp;代码，而添加的"空字符"我们在用一般的编辑器查看时，会显示形如空格或黑块，使得原码很难看懂，如用记事本查看则"空字符"会变成"空格"，利用这个原理加密结果如下：（其中显示的"空格"代表"空字符"）<br>&lt;S&nbsp;C&nbsp;RI&nbsp;P&nbsp;T&nbsp;L&nbsp;ANG&nbsp;U&nbsp;A&nbsp;G&nbsp;E&nbsp;="&nbsp;J&nbsp;a&nbsp;v&nbsp;a&nbsp;S&nbsp;c&nbsp;r&nbsp;i&nbsp;p&nbsp;t&nbsp;"&gt;&nbsp;<br><br>a&nbsp;l&nbsp;er&nbsp;t&nbsp;("&nbsp;黑&nbsp;客&nbsp;防&nbsp;线")&nbsp;;&nbsp;<br><br>&lt;&nbsp;/&nbsp;SC&nbsp;R&nbsp;I&nbsp;P&nbsp;T&gt;<br>&nbsp;<br><br>如何？是不是显得乱七八糟的？如果不知道方法的人很难想到要去掉里面的"空字符"（00H）的！<br><br>　　五：无用内容混乱以及换行空格TAB大法<br><br>　　在JAVASCRIPT代码中我们可以加入大量的无用字符串或数字，以及无用代码和注释内容等等，使真正的有用代码埋没在其中，并把有用的代码中能加入换行、空格、TAB的地方加入大量换行、空格、TAB，并可以把正常的字符串用"\"来进行换行，这样就会使得代码难以看懂！如我加密后的形式如下：<br>&lt;SCRIPT&nbsp;LANGUAGE="JavaScript"&gt;<br>"xajgxsadffgds";1234567890<br>625623216;var&nbsp;$=0;alert//@$%%&amp;*()(&amp;(^%^<br>//cctv&nbsp;function//<br>(//hhsaasajx&nbsp;xc<br>/*<br>asjgdsgu*/<br>"黑\<br>\<br>客\<br>防线"//ashjgfgf<br>/*<br>@#%$^&amp;%$96667r45fggbhytjty<br>*/<br>//window<br>)<br>;"#@$#%@#432hu";212351436<br>&lt;/SCRIPT&gt;<br>至少如果我看到这样的代码是不会有心思去分析它的，你哪？<br><br>　　六：自写解密函数法<br><br>　　这个方法和一、二差不多，只不过是自己写个函数对代码进行解密，很多VBS病毒使用这种方法对自身进行加密，来防止特征码扫描！下面是我写的一个简单的加密解密函数，<br><br>加密代码如下（详细参照文件"加密.htm"）：<br>&lt;SCRIPT&nbsp;LANGUAGE="JavaScript"&gt;<br>function&nbsp;compile(code)<br>{&nbsp;<br>var&nbsp;c=String.fromCharCode(code.charCodeAt(0)+code.length);<br>for(var&nbsp;i=1;i&lt;code.length;i++){<br>c+=String.fromCharCode(code.charCodeAt(i)+code.charCodeAt(i-1));<br>}<br>alert(escape(c));<br>}<br>compile('alert("《<a class=channel_keylink href="http://www.3800hk.com/"><font color=#000000><u>黑客</u></font></a>防线》");')<br>&lt;/SCRIPT&gt;<br>&nbsp;<br>运行得到加密结果为：<br>o%CD%D1%D7%E6%9CJ%u9EF3%uFA73%uF1D4%u14F1%u7EE1Kd<br>&nbsp;<br>相应的加密后解密的代码如下：<br>&lt;SCRIPT&nbsp;LANGUAGE="JavaScript"&gt;<br>function&nbsp;uncompile(code)<br>{<br>code=unescape(code);<br>var&nbsp;c=String.fromCharCode(code.charCodeAt(0)-code.length);<br>for(var&nbsp;i=1;i&lt;code.length;i++){<br>c+=String.fromCharCode(code.charCodeAt(i)-c.charCodeAt(i-1));<br>}<br>return&nbsp;c;<br>}<br>eval(uncompile("o%CD%D1%D7%E6%9CJ%u9EF3%uFA73%uF1D4%u14F1%u7EE1Kd"));<br>&lt;/SCRIPT&gt;<br>&nbsp;<br><br>　　七：错误的利用<br><br>　　利用try{}catch(e){}结构对代码进行测试解密，虽然这个想法很好（呵呵，夸夸自己），因为实用性不大，我仅给个例子<br>&lt;SCRIPT&nbsp;LANGUAGE="JavaScript"&gt;<br><br>var&nbsp;a='alert("《<a class=channel_keylink href="http://www.3800hk.com/"><font color=#000000><u>黑客</u></font></a>防线》");';<br>var&nbsp;c="";<br>for(var&nbsp;i=0;i&lt;a.length;i++){<br>c+=String.fromCharCode(a.charCodeAt(i)^61);}<br><br>alert(c);<br><br>//上面的是加密代码，当然如果真正使用这个方法时，不会把加密写上的<br>//现在变量c就是加密后的代码<br><br>//下面的函数t()先假设初始密码为０，解密执行，<br>//遇到错误则把密码加１，然后接着解密执行，直到正确运行<br><br>var&nbsp;d=c;&nbsp;//保存加密后的代码<br>var&nbsp;b=0;&nbsp;//假定初始密码为0<br>t();<br><br>function&nbsp;t(){<br>try{eval(c);}catch(e){<br>c="";<br>for(var&nbsp;i=0;i&lt;d.length;i++){<br>c+=String.fromCharCode(d.charCodeAt(i)^b);}<br>b+=1;<br>t();<br>//setTimeout("t()",0);<br>}<br>}<br>&lt;/SCRIPT&gt;<br>
<img src ="http://www.blogjava.net/zhuyan/aggbug/109209.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhuyan/" target="_blank">朱岩</a> 2007-04-08 10:58 <a href="http://www.blogjava.net/zhuyan/articles/109209.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>js小技巧</title><link>http://www.blogjava.net/zhuyan/articles/108897.html</link><dc:creator>朱岩</dc:creator><author>朱岩</author><pubDate>Fri, 06 Apr 2007 04:46:00 GMT</pubDate><guid>http://www.blogjava.net/zhuyan/articles/108897.html</guid><wfw:comment>http://www.blogjava.net/zhuyan/comments/108897.html</wfw:comment><comments>http://www.blogjava.net/zhuyan/articles/108897.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhuyan/comments/commentRss/108897.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhuyan/services/trackbacks/108897.html</trackback:ping><description><![CDATA[<div><a href="http://blog.csdn.net/lxs5i5j/archive/2007/01/22/1490206.aspx"><img height=13 src="http://21958978.spaces.live.com/images/authorship.gif" width=15 border=0><u><font color=#800080>&nbsp;js小技巧</font></u></a></div>
<div>1.document.write(""); 输出语句<br>2.JS中的注释为//<br>3.传统的HTML文档顺序是:document-&gt;html-&gt;(head,body)<br>4.一个浏览器窗口中的DOM顺序是:window-&gt;(navigator,screen,history,location,document)<br>5.得到表单中元素的名称和值:document.getElementById("表单中元素的ID号").name(或value)<br>6.一个小写转大写的JS: document.getElementById("output").value = document.getElementById("input").value.toUpperCase();<br>7.JS中的值类型:String,Number,Boolean,Null,Object,Function<br>8.JS中的字符型转换成数值型:parseInt(),parseFloat()<br>9.JS中的数字转换成字符型:(""+变量)<br>10.JS中的取字符串长度是:(length)<br>11.JS中的字符与字符相连接使用+号.<br>12.JS中的比较操作符有:==等于,!=不等于,&gt;,&gt;=,&lt;.&lt;=<br>13.JS中声明变量使用:var来进行声明<br>14.JS中的判断语句结构:if(condition){}else{}<br>15.JS中的循环结构:for([initial expression];[condition];[upadte expression]) {inside loop}<br>16.循环中止的命令是:break<br>17.JS中的函数定义:function functionName([parameter],...){statement[s]}<br>18.当文件中出现多个form表单时.可以用document.forms[0],document.forms[1]来代替.<br>19.窗口:打开窗口window.open(), 关闭一个窗口:window.close(), 窗口本身:self<br>20.状态栏的设置:window.status="字符";<br>21.弹出提示信息:window.alert("字符");<br>22.弹出确认框:window.confirm();<br>23.弹出输入提示框:window.prompt();<br>24.指定当前显示链接的位置:window.location.href="URL"<br>25.取出窗体中的所有表单的数量:document.forms.length<br>26.关闭文档的输出流:document.close();<br>27.字符串追加连接符:+=<br>28.创建一个文档元素:document.createElement(),document.createTextNode()<br>29.得到元素的方法:document.getElementById()<br>30.设置表单中所有文本型的成员的值为空:<br>var form = window.document.forms[0]<br>for (var i = 0; i&lt;form.elements.length;i++){<br>if (form.elements[i].type == "text"){<br>form.elements[i].value = "";<br>}<br>}<br>31.复选按钮在JS中判断是否选中:document.forms[0].checkThis.checked (checked属性代表为是否选中返回TRUE或FALSE)<br>32.单选按钮组(单选按钮的名称必须相同):取单选按钮组的长度document.forms[0].groupName.length<br>33.单选按钮组判断是否被选中也是用checked.<br>34.下拉列表框的值:document.forms[0].selectName.options[n].value (n有时用下拉列表框名称加上.selectedIndex来确定被选中的值)<br>35.字符串的定义:var myString = new String("This is lightsword");<br>36.字符串转成大写:string.toUpperCase(); 字符串转成小写:string.toLowerCase();<br>37.返回字符串2在字符串1中出现的位置:String1.indexOf("String2")!=-1则说明没找到.<br>38.取字符串中指定位置的一个字符:StringA.charAt(9);<br>39.取出字符串中指定起点和终点的子字符串:stringA.substring(2,6);<br>40.数学函数:Math.PI(返回圆周率),Math.SQRT2(返回开方),Math.max(value1,value2)返回两个数中的最在值,Math.pow(value1,10)返回value1的十次方,Math.round(value1)四舍五入函数,Math.floor(Math.random()*(n+1))返回随机数<br>41.定义日期型变量:var today = new Date();<br>42.日期函数列表:dateObj.getTime()得到时间,dateObj.getYear()得到年份,dateObj.getFullYear()得到四位的年份,dateObj.getMonth()得到月份,dateObj.getDate()得到日,dateObj.getDay()得到日期几,dateObj.getHours()得到小时,dateObj.getMinutes()得到分,dateObj.getSeconds()得到秒,dateObj.setTime(value)设置时间,dateObj.setYear(val)设置年,dateObj.setMonth(val)设置月,dateObj.setDate(val)设置日,dateObj.setDay(val)设置星期几,dateObj.setHours设置小时,dateObj.setMinutes(val)设置分,dateObj.setSeconds(val)设置秒 [注意:此日期时间从0开始计]<br>43.FRAME的表示方式: [window.]frames[n].ObjFuncVarName,frames["frameName"].ObjFuncVarName,frameName.ObjFuncVarName<br>44.parent代表父亲对象,top代表最顶端对象<br>45.打开子窗口的父窗口为:opener<br>46.表示当前所属的位置:this<br>47.当在超链接中调用JS函数时用:(javascript :)来开头后面加函数名<br>48.在老的浏览器中不执行此JS:&lt;!-- //--&gt;<br>49.引用一个文件式的JS:&lt;script type="text/javascript" src="aaa.js"&gt;&lt;/script&gt;<br>50.指定在不支持脚本的浏览器显示的HTML:&lt;noscript&gt;&lt;/noscript&gt;<br>51.当超链和ONCLICK事件都有时,则老版本的浏览器转向a.html,否则转向b.html.例:&lt;a href="a.html" onclick="location.href='b.html';return false"&gt;dfsadf&lt;/a&gt;<br>52.JS的内建对象有:Array,Boolean,Date,Error,EvalError,Function,Math,Number,Object,RangeError,ReferenceError,RegExp,String,SyntaxError,TypeError,URIError<br>53.JS中的换行:\n<br>54.窗口全屏大小:&lt;script&gt;function fullScreen(){ this.moveTo(0,0);this.outerWidth=screen.availWidth;this.outerHeight=screen.availHeight;}window.maximize=fullScreen;&lt;/script&gt;<br>55.JS中的all代表其下层的全部元素<br>56.JS中的焦点顺序:document.getElementByid("表单元素").tabIndex = 1<br>57.innerHTML的值是表单元素的值:如&lt;p id="para"&gt;"how are &lt;em&gt;you&lt;/em&gt;"&lt;/p&gt;,则innerHTML的值就是:how are &lt;em&gt;you&lt;/em&gt;<br>58.innerTEXT的值和上面的一样,只不过不会把&lt;em&gt;这种标记显示出来.<br>59.contentEditable可设置元素是否可被修改,isContentEditable返回是否可修改的状态.<br>60.isDisabled判断是否为禁止状态.disabled设置禁止状态<br>61.length取得长度,返回整型数值<br>62.addBehavior()是一种JS调用的外部函数文件其扩展名为.htc<br>63.window.focus()使当前的窗口在所有窗口之前.<br>64.blur()指失去焦点.与FOCUS()相反.<br>65.select()指元素为选中状态.<br>66.防止用户对文本框中输入文本:onfocus="this.blur()"<br>67.取出该元素在页面中出现的数量:document.all.tags("div(或其它HTML标记符)").length<br>68.JS中分为两种窗体输出:模态和非模态.window.showModaldialog(),window.showModeless()<br>69.状态栏文字的设置:window.status='文字',默认的状态栏文字设置:window.defaultStatus = '文字.';<br>70.添加到收藏夹:external.AddFavorite("http://www.dannyg.com","jaskdlf");<br>71.JS中遇到脚本错误时不做任何操作:window.onerror = doNothing; 指定错误句柄的语法为:window.onerror = handleError;<br>72.JS中指定当前打开窗口的父窗口:window.opener,支持opener.opener...的多重继续.<br>73.JS中的self指的是当前的窗口<br>74.JS中状态栏显示内容:window.status="内容"<br>75.JS中的top指的是框架集中最顶层的框架<br>76.JS中关闭当前的窗口:window.close();<br>77.JS中提出是否确认的框:if(confirm("Are you sure?")){alert("ok");}else{alert("Not Ok");}<br>78.JS中的窗口重定向:window.navigate("http://www.sina.com.cn");<br>79.JS中的打印:window.print()<br>80.JS中的提示输入框:window.prompt("message","defaultReply");<br>81.JS中的窗口滚动条:window.scroll(x,y)<br>82.JS中的窗口滚动到位置:window.scrollby<br>83.JS中设置时间间隔:setInterval("expr",msecDelay)或setInterval(funcRef,msecDelay)或setTimeout<br>84.JS中的模态显示在IE4+行,在NN中不行:showModalDialog("URL"[,arguments][,features]);<br>85.JS中的退出之前使用的句柄:function verifyClose(){event.returnValue="we really like you and hope you will stay longer.";}} window.onbeforeunload=verifyClose;<br>86.当窗体第一次调用时使用的文件句柄:onload()<br>87.当窗体关闭时调用的文件句柄:onunload()<br>88.window.location的属性: protocol(http:),hostname(www.example.com),port(80),host(www.example.com:80),pathname("/a/a.html"),hash("#giantGizmo",指跳转到相应的锚记),href(全部的信息)<br>89.window.location.reload()刷新当前页面.<br>90.window.history.back()返回上一页,window.history.forward()返回下一页,window.history.go(返回第几页,也可以使用访问过的URL)<br>91.document.write()不换行的输出,document.writeln()换行输出<br>92.document.body.noWrap=true;防止链接文字折行.<br>93.变量名.charAt(第几位),取该变量的第几位的字符.<br>94."abc".charCodeAt(第几个),返回第几个字符的ASCii码值.<br>95.字符串连接:string.concat(string2),或用+=进行连接<br>96.变量.indexOf("字符",起始位置),返回第一个出现的位置(从0开始计算)<br>97.string.lastIndexOf(searchString[,startIndex])最后一次出现的位置.<br>98.string.match(regExpression),判断字符是否匹配.<br>99.string.replace(regExpression,replaceString)替换现有字符串.<br>100.string.split(分隔符)返回一个数组存储值.<br>101.string.substr(start[,length])取从第几位到指定长度的字符串.<br>102.string.toLowerCase()使字符串全部变为小写.<br>103.string.toUpperCase()使全部字符变为大写.<br>104.parseInt(string[,radix(代表进制)])强制转换成整型.<br>105.parseFloat(string[,radix])强制转换成浮点型.<br>106.isNaN(变量):测试是否为数值型.<br>107.定义常量的关键字:const,定义变量的关键字:var&nbsp;<br></div>
<img src ="http://www.blogjava.net/zhuyan/aggbug/108897.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhuyan/" target="_blank">朱岩</a> 2007-04-06 12:46 <a href="http://www.blogjava.net/zhuyan/articles/108897.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JavaScript使用cookie</title><link>http://www.blogjava.net/zhuyan/articles/108881.html</link><dc:creator>朱岩</dc:creator><author>朱岩</author><pubDate>Fri, 06 Apr 2007 03:36:00 GMT</pubDate><guid>http://www.blogjava.net/zhuyan/articles/108881.html</guid><wfw:comment>http://www.blogjava.net/zhuyan/comments/108881.html</wfw:comment><comments>http://www.blogjava.net/zhuyan/articles/108881.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhuyan/comments/commentRss/108881.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhuyan/services/trackbacks/108881.html</trackback:ping><description><![CDATA[<p><strong><font size=4>cookie概述<br></font></strong><font size=2>在上一节，曾经利用一个不变的框架来存储购物栏数据，而商品显示页面是不断变化的，尽管这样能达到一个模拟全局变量的功能，但并不严谨。例如在导航框架页面内右击，单击快捷菜单中的【刷新】命令，则所有的JavaScript变量都会丢失。因此，要实现严格的跨页面全局变量，这种方式是不行的，JavaScript中的另一个机制：cookie，则可以达到真正全局变量的要求。<br>cookie是浏览器提供的一种机制，它将document对象的cookie属性提供给JavaScript。可以由JavaScript对其进行控制，而并不是JavaScript本身的性质。cookie是存于用户硬盘的一个文件，这个文件通常对应于一个域名，当浏览器再次访问这个域名时，便使这个cookie可用。因此，cookie可以跨越一个域名下的多个网页，但不能跨越多个域名使用。<br>不同的浏览器对cookie的实现也不一样，但其性质是相同的。例如在Windows 2000以及Windows xp中，cookie文件存储于documents and settings\userName\cookie\文件夹下。通常的命名格式为：</font><a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#117;&#115;&#101;&#114;&#78;&#97;&#109;&#101;&#64;&#100;&#111;&#109;&#97;&#105;&#110;&#46;&#116;&#120;&#116;" snap_preview_added="no"><font color=#0000ff size=2><u>userName@domain.txt</u></font></a><font size=2>。<br>cookie机制将信息存储于用户硬盘，因此可以作为全局变量，这是它最大的一个优点。它可以用于以下几种场合。<br>?&nbsp;保存用户登录状态。例如将用户id存储于一个cookie内，这样当用户下次访问该页面时就不需要重新登录了，现在很多论坛和社区都提供这样的功能。cookie还可以设置过期时间，当超过时间期限后，cookie就会自动消失。因此，系统往往可以提示用户保持登录状态的时间：常见选项有一个月、三个月、一年等。<br>?&nbsp;跟踪用户行为。例如一个天气预报网站，能够根据用户选择的地区显示当地的天气情况。如果每次都需要选择所在地是烦琐的，当利用了cookie后就会显得很人性化了，系统能够记住上一次访问的地区，当下次再打开该页面时，它就会自动显示上次用户所在地区的天气情况。因为一切都是在后台完成，所以这样的页面就像为某个用户所定制的一样，使用起来非常方便。<br>?&nbsp;定制页面。如果网站提供了换肤或更换布局的功能，那么可以使用cookie来记录用户的选项，例如：背景色、分辨率等。当用户下次访问时，仍然可以保存上一次访问的界面风格。<br>?&nbsp;创建购物车。正如在前面的例子中使用cookie来记录用户需要购买的商品一样，在结账的时候可以统一提交。例如淘宝网就使用cookie记录了用户曾经浏览过的商品，方便随时进行比较。<br>当然，上述应用仅仅是cookie能完成的部分应用，还有更多的功能需要全局变量。cookie的缺点主要集中于安全性和隐私保护。主要包括以下几种：<br>?&nbsp;cookie可能被禁用。当用户非常注重个人隐私保护时，他很可能禁用浏览器的cookie功能；<br>?&nbsp;cookie是与浏览器相关的。这意味着即使访问的是同一个页面，不同浏览器之间所保存的cookie也是不能互相访问的；<br>?&nbsp;cookie可能被删除。因为每个cookie都是硬盘上的一个文件，因此很有可能被用户删除；<br>?&nbsp;cookie安全性不够高。所有的cookie都是以纯文本的形式记录于文件中，因此如果要保存用户名密码等信息时，最好事先经过加密处理。<br><strong><font size=4>设置cookie<br></font></strong>每个cookie都是一个名/值对，可以把下面这样一个字符串赋值给document.cookie：<br>document.cookie="userId=828";<br>如果要一次存储多个名/值对，可以使用分号加空格（; ）隔开，例如：<br>document.cookie="userId=828; userName=hulk";<br>在cookie的名或值中不能使用分号（;）、逗号（,）、等号（=）以及空格。在cookie的名中做到这点很容易，但要保存的值是不确定的。如何来存储这些值呢？方法是用escape()函数进行编码，它能将一些特殊符号使用十六进制表示，例如空格将会编码为&#8220;20%&#8221;，从而可以存储于cookie值中，而且使用此种方案还可以避免中文乱码的出现。例如：<br>document.cookie="str="+escape("I love ajax");<br>相当于：<br>document.cookie="str=I%20love%20ajax";<br>当使用escape()编码后，在取出值以后需要使用unescape()进行解码才能得到原来的cookie值，这在前面已经介绍过。<br>尽管document.cookie看上去就像一个属性，可以赋不同的值。但它和一般的属性不一样，改变它的赋值并不意味着丢失原来的值，例如连续执行下面两条语句：<br>document.cookie="userId=828";<br>document.cookie="userName=hulk";<br>这时浏览器将维护两个cookie，分别是userId和userName，因此给document.cookie赋值更像执行类似这样的语句：<br>document.addCookie("userId=828");<br>document.addCookie("userName=hulk");<br>事实上，浏览器就是按照这样的方式来设置cookie的，如果要改变一个cookie的值，只需重新赋值，例如：<br>document.cookie="userId=929";<br>这样就将名为userId的cookie值设置为了929。</font></p>
<p><font size=2><strong><font size=4>获取cookie的值<br></font></strong>下面介绍如何获取cookie的值。cookie的值可以由document.cookie直接获得：<br>var strCookie=document.cookie;<br>这将获得以分号隔开的多个名/值对所组成的字符串，这些名/值对包括了该域名下的所有cookie。例如：<br>&lt;script language="JavaScript" type="text/javascript"&gt;<br>&lt;!--<br>document.cookie="userId=828";<br>document.cookie="userName=hulk";<br>var strCookie=document.cookie;<br>alert(strCookie);<br>//--&gt;<br>&lt;/script&gt;<br>图7.1显示了输出的cookie值。由此可见，只能够一次获取所有的cookie值，而不能指定cookie名称来获得指定的值，这正是处理cookie值最麻烦的一部分。用户必须自己分析这个字符串，来获取指定的cookie值，例如，要获取userId的值，可以这样实现：<br>&lt;script language="JavaScript" type="text/javascript"&gt;<br>&lt;!--<br>//设置两个cookie<br>document.cookie="userId=828";<br>document.cookie="userName=hulk";<br>//获取cookie字符串<br>var strCookie=document.cookie;<br>//将多cookie切割为多个名/值对<br>var arrCookie=strCookie.split("; ");<br>var userId;<br>//遍历cookie数组，处理每个cookie对<br>for(var i=0;i&lt;arrCookie.length;i++){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var arr=arrCookie[i].split("=");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //找到名称为userId的cookie，并返回它的值<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if("userId"==arr[0]){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; userId=arr[1];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>}<br>alert(userId);<br>//--&gt;<br>&lt;/script&gt;<br>这样就得到了单个cookie的值</font></p>
<p><font size=2>用类似的方法，可以获取一个或多个cookie的值，其主要的技巧仍然是字符串和数组的相关操作。</font></p>
<strong><font size=4>给cookie设置终止日期<br></font></strong><font size=2>到现在为止，所有的cookie都是单会话cookie，即浏览器关闭后这些cookie将会丢失，事实上这些cookie仅仅是存储在内存中，而没有建立相应的硬盘文件。<br>在实际开发中，cookie常常需要长期保存，例如保存用户登录的状态。这可以用下面的选项来实现：<br>document.cookie="userId=828; expires=GMT_String";<br>其中GMT_String是以GMT格式表示的时间字符串，这条语句就是将userId这个cookie设置为GMT_String表示的过期时间，超过这个时间，cookie将消失，不可访问。例如：如果要将cookie设置为10天后过期，可以这样实现：<br>&lt;script language="JavaScript" type="text/javascript"&gt;<br>&lt;!--<br>//获取当前时间<br>var date=new Date();<br>var expireDays=10;<br>//将date设置为10天以后的时间<br>date.setTime(date.getTime()+expireDays*24*3600*1000);<br>//将userId和userName两个cookie设置为10天后过期<br>document.cookie="userId=828; userName=hulk; expire="+date.toGMTString();<br>//--&gt;<br>&lt;/script&gt;</font><br>
<p><font size=2><strong><font size=4>删除cookie<br></font></strong>为了删除一个cookie，可以将其过期时间设定为一个过去的时间，例如：<br>&lt;script language="JavaScript" type="text/javascript"&gt;<br>&lt;!--<br>//获取当前时间<br>var date=new Date();<br>//将date设置为过去的时间<br>date.setTime(date.getTime()-10000);<br>//将userId这个cookie删除<br>document.cookie="userId=828; expire="+date.toGMTString();<br>//--&gt;<br>&lt;/script&gt;<br><strong><font size=4>指定可访问cookie的路径<br></font></strong>默认情况下，如果在某个页面创建了一个cookie，那么该页面所在目录中的其他页面也可以访问该cookie。如果这个目录下还有子目录，则在子目录中也可以访问。例如在<a href="http://www.xxxx.com/html/a.html" snap_preview_added="spa" snap_icon_added="spa" act_suffix icon_trigger="false" text_trigger="true" parent_link_icon="false"><font color=#0000ff size=2><u>www.xxxx.com/html/a.html</u></font></a><font size=2>中所创建的cookie，可以被</font><a href="http://www.xxxx.com/html/b.html" snap_preview_added="spa" snap_icon_added="spa" act_suffix icon_trigger="false" text_trigger="true" parent_link_icon="false"><font color=#0000ff size=2><u>www.xxxx.com/html/b.html</u></font></a><font size=2>或</font><a href="http://www.xxx.com/" snap_preview_added="spa" snap_icon_added="spa" act_suffix icon_trigger="false" text_trigger="true" parent_link_icon="false"><font color=#0000ff size=2><u>www.xxx.com/</u></font></a><font size=2> html/ some/c.html所访问，但不能被</font><a href="http://www.xxxx.com/d.html" snap_preview_added="spa" snap_icon_added="spa" act_suffix icon_trigger="false" text_trigger="true" parent_link_icon="false"><font color=#0000ff size=2><u>www.xxxx.com/d.html</u></font></a><font size=2>访问。<br>为了控制cookie可以访问的目录，需要使用path参数设置cookie，语法如下：<br>document.cookie="name=value; path=cookieDir";<br>其中cookieDir表示可访问cookie的目录。例如：<br>document.cookie="userId=320; path=/shop";<br>就表示当前cookie仅能在shop目录下使用。<br>如果要使cookie在整个网站下可用，可以将cookie_dir指定为根目录，例如：<br>document.cookie="userId=320; path=/";<br></font></font></p>
<p><font size=2><font size=2><strong><font size=4>指定可访问cookie的主机名<br></font></strong>和路径类似，主机名是指同一个域下的不同主机，例如：<a href="http://www.google.com/" snap_preview_added="spa" snap_icon_added="spa" act_suffix icon_trigger="false" text_trigger="true" parent_link_icon="false"><font color=#800080 size=2><u>www.google.com</u></font></a><font size=2>和gmail.google.com就是两个不同的主机名。默认情况下，一个主机中创建的cookie在另一个主机下是不能被访问的，但可以通过domain参数来实现对其的控制，其语法格式为：<br>document.cookie="name=value; domain=cookieDomain";<br>以google为例，要实现跨主机访问，可以写为：<br>document.cookie="name=value;domain=.google.com";<br>这样，所有google.com下的主机都可以访问该cookie。<br></font></font></font></p>
<strong><font size=4>综合示例：构造通用的cookie处理函数<br></font></strong><font size=2>cookie的处理过程比较复杂，并具有一定的相似性。因此可以定义几个函数来完成cookie的通用操作，从而实现代码的复用。下面列出了常用的cookie操作及其函数实现。<br>1．添加一个cookie：addCookie(name,value,expireHours)<br>该函数接收3个参数：cookie名称，cookie值，以及在多少小时后过期。这里约定expireHours为0时不设定过期时间，即当浏览器关闭时cookie自动消失。该函数实现如下：<br>&lt;script language="JavaScript" type="text/javascript"&gt;<br>&lt;!--<br>function addCookie(name,value,expireHours){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var cookieString=name+"="+escape(value);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //判断是否设置过期时间<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(expireHours&gt;0){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var date=new Date();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; date.setTime(date.getTime+expireHours*3600*1000);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cookieString=cookieString+"; expire="+date.toGMTString();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; document.cookie=cookieString;<br>}<br>//--&gt;<br>&lt;/script&gt;<br>2．获取指定名称的cookie值：getCookie(name)<br>该函数返回名称为name的cookie值，如果不存在则返回空，其实现如下：<br>&lt;script language="JavaScript" type="text/javascript"&gt;<br>&lt;!--<br>function getCookie(name){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var strCookie=document.cookie;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var arrCookie=strCookie.split("; ");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(var i=0;i&lt;arrCookie.length;i++){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var arr=arrCookie[i].split("=");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(arr[0]==name)return arr[1];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return "";<br>}<br>//--&gt;<br>&lt;/script&gt;<br>3．删除指定名称的cookie：deleteCookie(name)<br>该函数可以删除指定名称的cookie，其实现如下：<br>&lt;script language="JavaScript" type="text/javascript"&gt;<br>&lt;!--<br>function deleteCookie(name){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var date=new Date();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; date.setTime(date.getTime()-10000);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; document.cookie=name+"=v; expire="+date.toGMTString();<br>}<br>//--&gt;<br>&lt;/script&gt;</font><br>
<img src ="http://www.blogjava.net/zhuyan/aggbug/108881.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhuyan/" target="_blank">朱岩</a> 2007-04-06 11:36 <a href="http://www.blogjava.net/zhuyan/articles/108881.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Rico入门</title><link>http://www.blogjava.net/zhuyan/articles/107135.html</link><dc:creator>朱岩</dc:creator><author>朱岩</author><pubDate>Thu, 29 Mar 2007 02:09:00 GMT</pubDate><guid>http://www.blogjava.net/zhuyan/articles/107135.html</guid><wfw:comment>http://www.blogjava.net/zhuyan/comments/107135.html</wfw:comment><comments>http://www.blogjava.net/zhuyan/articles/107135.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhuyan/comments/commentRss/107135.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhuyan/services/trackbacks/107135.html</trackback:ping><description><![CDATA[
		<span class="javascript" id="text180948">
				<b>0. 簡介。</b>
				<br />一個支援 AJAX的 javascript library，夠簡單吧。 <br /><br /><b>1. 下載 Rico的 js file。</b><br />到 <a class="ilink" href="http://openrico.org/" target="_blank"><font color="#004080">http://openrico.org/</font></a> 下載 prototype.js 和 rico.js。 <br /><br /><b>2. include js file。</b><br />網頁裡加上下面兩個設定(假設步驟一下載的檔案放在scripts目錄)。 <br /><table class="java" cellspacing="1" cellpadding="3" bgcolor="#999999" border="0"><tbody><tr><td valign="top" align="left" width="1" bgcolor="#dddddd"><pre><font color="#555555">1<br />2<br /></font></pre></td><td valign="top" align="left" bgcolor="#ffffff"><pre>&lt;script src=<font class="java-string">"scripts/prototype.js"</font>&gt;&lt;/script&gt;
&lt;script src=<font class="java-string">"scripts/rico.js"</font>&gt;&lt;/script&gt;
</pre></td></tr></tbody></table><br /><br /><b>3. 在網頁裡設定 request。</b><br />一個網頁可以設定多個request，而且這個最好設定成全域變數， <br />這樣就可以共用這個 request URL，requestName只是識別用，所以可以任意命名。 <br /><table class="java" cellspacing="1" cellpadding="3" bgcolor="#999999" border="0"><tbody><tr><td valign="top" align="left" width="1" bgcolor="#dddddd"><pre><font color="#555555">1<br />2<br />3<br /></font></pre></td><td valign="top" align="left" bgcolor="#ffffff"><pre>ajaxEngine.registerRequest(<font class="java-string">"requestName"</font>,<font class="java-string">"requestURL"</font>);
<font class="java-comment">//例如</font>
ajaxEngine.registerRequest(<font class="java-string">"getPersonInfo"</font>,<font class="java-string">"getPersonInfo.do"</font>);
</pre></td></tr></tbody></table><br /><br /><b>4. 設定回傳時要對應的物件。</b><br />設定回傳時要對應的物件的目的，是要指定回傳資料內容，對應到網頁那個物件，或交由誰處理。 <br />Rico的回傳物件有兩種，一種是element一種是object， <br />差別在於element是任意格式，但只能對應單一網頁物件，object可以多筆，可以寫自己的回傳事件。 <br />另外設定的時間點也要注意，就是說如果網頁物件還沒產生，就先設定，那麼會不 work。 <br /><br /><b>4-1 設定回傳後會變更網頁的那個 element。</b><br />registerAjaxElement如果只給一個參數，則自動對應同名ID的網頁物件， <br />回傳時直接用回傳內容修改對應網頁物件的innerHTML，所以沒有可自己處裡的事件。 <br /><table class="java" cellspacing="1" cellpadding="3" bgcolor="#999999" border="0"><tbody><tr><td valign="top" align="left" width="1" bgcolor="#dddddd"><pre><font color="#555555">1<br />2<br />3<br />4<br /></font></pre></td><td valign="top" align="left" bgcolor="#ffffff"><pre><font class="java-comment">//對應到同名的 elementId</font>
ajaxEngine.registerAjaxElement(<font class="java-string">"elementId"</font>);
<font class="java-comment">//回傳的 fromElementId內容，會變更 toElementId物件</font>
ajaxEngine.registerAjaxElement(<font class="java-string">"fromElementId"</font>,$(<font class="java-string">"toElementId"</font>));
</pre></td></tr></tbody></table><br /><br /><b>4-2 設定回傳後要由哪個 object處理。</b><br />Rico會將回傳資料當參數，傳給對應 object的 ajaxUpdate，所以自己寫的object必須有這個method。 <br />也就自己處理回傳後事件的起點。 <br /><table class="java" cellspacing="1" cellpadding="3" bgcolor="#999999" border="0"><tbody><tr><td valign="top" align="left" width="1" bgcolor="#dddddd"><pre><font color="#555555">1<br /></font></pre></td><td valign="top" align="left" bgcolor="#ffffff"><pre>ajaxEngine.registerAjaxObject(<font class="java-string">"objectId"</font>,<font class="java-reserved_word"><b>new</b></font> UserObject());
</pre></td></tr></tbody></table><br /><br /><b>4-3 回傳的XML格式。</b><br />回傳值必須是下面格式的XML，所以回傳內容的 contentType必須是 application/xml， <br />還有中文在UTF8格式時可以正常顯示，其他編碼都會看到亂碼。 <br /><table class="java" cellspacing="1" cellpadding="3" bgcolor="#999999" border="0"><tbody><tr><td valign="top" align="left" width="1" bgcolor="#dddddd"><pre><font color="#555555">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br /></font></pre></td><td valign="top" align="left" bgcolor="#ffffff"><pre>&lt;ajax-response&gt; 
&lt;response type=<font class="java-string">"element|object"</font> id=<font class="java-string">"elementId"</font>&gt;
  response可以有一或多個，也可以element object混用
&lt;/response&gt;
&lt;/ajax-response&gt; 
<font class="java-comment">//例如</font>
&lt;ajax-response&gt; 
&lt;response type=<font class="java-string">"object"</font> id=<font class="java-string">"objectId"</font>&gt;
  &lt;returnObject name=<font class="java-string">"Hello"</font> age=<font class="java-string">"1"</font> /&gt;
  &lt;returnObject name=<font class="java-string">"World"</font> age=<font class="java-string">"99"</font> /&gt;
&lt;/response&gt;
&lt;response type=<font class="java-string">"element"</font> id=<font class="java-string">"elementId"</font>&gt;Hello World&lt;/response&gt;
&lt;/ajax-response&gt; 
</pre></td></tr></tbody></table><br /><br /><b>5. 網頁事件。</b><br />當網頁事件發生時，要做的就是送出request，此時會根據對應的 requestName， <br />找到對應的URL來傳送資料， <br />只要再把要傳遞的參數傳給 sendRequest就可以了。 <br /><table class="java" cellspacing="1" cellpadding="3" bgcolor="#999999" border="0"><tbody><tr><td valign="top" align="left" width="1" bgcolor="#dddddd"><pre><font color="#555555">1<br />2<br />3<br /></font></pre></td><td valign="top" align="left" bgcolor="#ffffff"><pre>ajaxEngine.sendRequest(<font class="java-string">"getPersonInfo"</font>, 
                        <font class="java-string">"firstName="</font> + firstName, 
                        <font class="java-string">"lastName="</font> + lastName ); 
</pre></td></tr></tbody></table><br /><br /><b>5-1 post</b><br />如果要用poet的方式傳送資料，就比較麻煩，要用這種方式。 <br /><table class="java" cellspacing="1" cellpadding="3" bgcolor="#999999" border="0"><tbody><tr><td valign="top" align="left" width="1" bgcolor="#dddddd"><pre><font color="#555555">1<br />2<br />3<br /></font></pre></td><td valign="top" align="left" bgcolor="#ffffff"><pre>var params=<font class="java-string">"rName="</font>+document.getElementById(<font class="java-string">"userName"</font>).value+<font class="java-string">"&amp;rAge="</font>+document.getElementById(<font class="java-string">"age"</font>).value;
<font class="java-comment">//post要小寫。</font>
ajaxEngine.sendRequest(<font class="java-string">"hello"</font>,<font class="java-bracket">{</font>method:<font class="java-string">"post"</font>,parameters:params<font class="java-bracket">}</font>);
</pre></td></tr></tbody></table><br /><br /><b>6. 範例</b><br />最後來個矬矬的範例吧，把下面三個程式放在一起就可以測試了，當然，別忘了下載 Rico的js file。 <br /><br /><b>6-1 主網頁</b><br /><table class="java" cellspacing="1" cellpadding="3" bgcolor="#999999" border="0"><tbody><tr><td valign="top" align="left" width="1" bgcolor="#dddddd"><pre><font color="#555555">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br />57<br />58<br />59<br />60<br />61<br />62<br /></font></pre></td><td valign="top" align="left" bgcolor="#ffffff"><pre>&lt;html&gt;
&lt;head&gt;
&lt;script src=<font class="java-string">"js/prototype.js"</font> type=<font class="java-string">"text/javascript"</font>&gt;&lt;/script&gt;
&lt;script src=<font class="java-string">"js/rico.js"</font> type=<font class="java-string">"text/javascript"</font>&gt;&lt;/script&gt;
&lt;script language=<font class="java-string">"javascript"</font>&gt;
  ajaxEngine.registerRequest(<font class="java-string">"getElement"</font>, <font class="java-string">"returnElement.jsp"</font>);
  ajaxEngine.registerRequest(<font class="java-string">"getObject"</font>, <font class="java-string">"returnObject.jsp"</font>);
  
function runMe1() <font class="java-bracket">{</font>
  ajaxEngine.registerAjaxElement(<font class="java-string">"helloId"</font>);
  ajaxEngine.registerAjaxElement(<font class="java-string">"sayHello"</font>);
  ajaxEngine.registerAjaxElement(<font class="java-string">"fromElementId"</font>,$(<font class="java-string">"toElementId"</font>));      
 
  var pramas = <font class="java-string">"Name="</font>+document.getElementById(<font class="java-string">"userName"</font>).value;
  ajaxEngine.sendRequest(<font class="java-string">"getElement"</font>,pramas);
<font class="java-bracket">}</font>
 
  ajaxEngine.registerAjaxObject(<font class="java-string">"objectId"</font>,<font class="java-reserved_word"><b>new</b></font> UserObject());
  
function runMe2()<font class="java-bracket">{</font>
ajaxEngine.sendRequest(<font class="java-string">"getObject"</font>,
                       <font class="java-string">"rName="</font>+document.getElementById(<font class="java-string">"uName"</font>).value,
                       <font class="java-string">"rAge="</font>+document.getElementById(<font class="java-string">"age"</font>).value);
<font class="java-comment">//這是post的方法</font><font class="java-comment">//var params="rName="+document.getElementById("userName").value+</font><font class="java-comment">//   "&amp;rAge="+document.getElementById("age").value;</font><font class="java-comment">//ajaxEngine.sendRequest("hello",{method:"post",parameters:params});</font><font class="java-bracket">}</font>
function UserObject()<font class="java-bracket">{</font>
this.ajaxUpdate=function(ajaxResponse)<font class="java-bracket">{</font><font class="java-comment">//alert(ajaxResponse);</font>
   var objs = ajaxResponse.getElementsByTagName(<font class="java-string">'returnObject'</font>);
   var tabStr=<font class="java-string">"&lt;table border='1'&gt;&lt;tr&gt;&lt;td&gt;姓名&lt;/td&gt;&lt;td&gt;年齡&lt;/td&gt;&lt;/tr&gt;"</font><font class="java-reserved_word"><b>for</b></font>(var i=0;i&lt;objs.length;i++)<font class="java-bracket">{</font>
       tabStr+=<font class="java-string">"&lt;tr&gt;&lt;td&gt;"</font>;
     tabStr+=objs[i].getAttribute(<font class="java-string">"name"</font>)+<font class="java-string">"&lt;/td&gt;&lt;td&gt;"</font>+objs[i].getAttribute(<font class="java-string">"age"</font>);
       tabStr+=<font class="java-string">"&lt;/td&gt;&lt;/tr&gt;"</font>;     
   <font class="java-bracket">}</font>
   tabStr+=<font class="java-string">"&lt;/table&gt;"</font>;
 
   this.setValue(tabStr);
<font class="java-bracket">}</font>
this.setValue=function(str)<font class="java-bracket">{</font>
   document.getElementById(<font class="java-string">"result"</font>).innerHTML=str;
<font class="java-bracket">}</font><font class="java-bracket">}</font>
&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;h3&gt;Element Test&lt;/h3&gt;
Your Name:&lt;input type=<font class="java-string">"text"</font> id=<font class="java-string">"userName"</font> name=<font class="java-string">"userName"</font>&gt;
&lt;input type=<font class="java-string">"button"</font> name=<font class="java-string">"BT"</font> value=<font class="java-string">"click me"</font> onclick=<font class="java-string">"runMe1()"</font>&gt;
&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;div id=<font class="java-string">"helloId"</font>&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;div id=<font class="java-string">"toElementId"</font>&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;div id=<font class="java-string">"sayHello"</font>&gt;&lt;/div&gt;
&lt;hr&gt;
&lt;h3&gt;Object Test&lt;/h3&gt;
Your Name:&lt;input type=<font class="java-string">"text"</font> id=<font class="java-string">"uName"</font> name=<font class="java-string">"uName"</font>&gt;
Your Age:&lt;input type=<font class="java-string">"text"</font> id=<font class="java-string">"age"</font> name=<font class="java-string">"age"</font>&gt;
&lt;input type=<font class="java-string">"button"</font> value=<font class="java-string">"Click Me"</font> onclick=<font class="java-string">"runMe2()"</font>&gt;
&lt;div id=<font class="java-string">"result"</font>&gt;&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre></td></tr></tbody></table><br /><br /><b>6-2 returnElement.jsp</b><br /><table class="java" cellspacing="1" cellpadding="3" bgcolor="#999999" border="0"><tbody><tr><td valign="top" align="left" width="1" bgcolor="#dddddd"><pre><font color="#555555">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br /></font></pre></td><td valign="top" align="left" bgcolor="#ffffff"><pre>&lt;%@ page language=<font class="java-string">"java"</font> contentType=<font class="java-string">"text/html; charset=UTF-8"</font>
    pageEncoding=<font class="java-string">"UTF-8"</font>%&gt;
&lt;%
response.setContentType(<font class="java-string">"application/xml"</font>);
%&gt;    
&lt;ajax-response&gt; 
&lt;response type=<font class="java-string">"element"</font> id=<font class="java-string">"helloId"</font>&gt;&lt;span style=<font class="java-string">"color:#008000"</font>&gt;Hello&lt;/span&gt;&lt;/response&gt; 
&lt;response type=<font class="java-string">"element"</font> id=<font class="java-string">"fromElementId"</font>&gt;&lt;%=request.getParameter(<font class="java-string">"Name"</font>)%&gt;&lt;/response&gt;
&lt;response type=<font class="java-string">"element"</font> id=<font class="java-string">"sayHello"</font>&gt;
&lt;script language=<font class="java-string">"javascript"</font>&gt;
alert(<font class="java-string">"Hello "</font>+&lt;%=request.getParameter(<font class="java-string">"Name"</font>)%&gt;);
&lt;/script&gt;
&lt;/response&gt;
&lt;/ajax-response&gt; 
</pre></td></tr></tbody></table><br /><br /><b>6-3 returnObject.jsp</b><br /><table class="java" cellspacing="1" cellpadding="3" bgcolor="#999999" border="0"><tbody><tr><td valign="top" align="left" width="1" bgcolor="#dddddd"><pre><font color="#555555">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br /></font></pre></td><td valign="top" align="left" bgcolor="#ffffff"><pre>&lt;%@ page language=<font class="java-string">"java"</font> contentType=<font class="java-string">"text/html; charset=UTF-8"</font>
    pageEncoding=<font class="java-string">"UTF-8"</font>%&gt;
&lt;%
response.setContentType(<font class="java-string">"application/xml"</font>);
%&gt;    
&lt;ajax-response&gt; 
&lt;response type=<font class="java-string">"object"</font> id=<font class="java-string">"objectId"</font>&gt;
&lt;returnObject name=<font class="java-string">"&lt;%=request.getParameter("</font>rName<font class="java-string">")%&gt;-1"</font> age=<font class="java-string">"&lt;%=request.getParameter("</font>rAge<font class="java-string">")%&gt;"</font> /&gt;
&lt;returnObject name=<font class="java-string">"&lt;%=request.getParameter("</font>rName<font class="java-string">")%&gt;-2"</font> age=<font class="java-string">"&lt;%=request.getParameter("</font>rAge<font class="java-string">")%&gt;"</font> /&gt;
&lt;returnObject name=<font class="java-string">"&lt;%=request.getParameter("</font>rName<font class="java-string">")%&gt;-3"</font> age=<font class="java-string">"&lt;%=request.getParameter("</font>rAge<font class="java-string">")%&gt;"</font> /&gt;
&lt;/response&gt; 
&lt;/ajax-response&gt; 
</pre></td></tr></tbody></table></span>
<img src ="http://www.blogjava.net/zhuyan/aggbug/107135.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhuyan/" target="_blank">朱岩</a> 2007-03-29 10:09 <a href="http://www.blogjava.net/zhuyan/articles/107135.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>prototype.js开发笔记 (转)</title><link>http://www.blogjava.net/zhuyan/articles/105759.html</link><dc:creator>朱岩</dc:creator><author>朱岩</author><pubDate>Fri, 23 Mar 2007 02:46:00 GMT</pubDate><guid>http://www.blogjava.net/zhuyan/articles/105759.html</guid><wfw:comment>http://www.blogjava.net/zhuyan/comments/105759.html</wfw:comment><comments>http://www.blogjava.net/zhuyan/articles/105759.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhuyan/comments/commentRss/105759.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhuyan/services/trackbacks/105759.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 1. Prototype是什么?		或许你还没有用过它， prototype.js 是一个由Sam Stephenson写的JavaScript包。这个构思奇妙编写良好的一段兼容标准的一段代码将承担创造胖客户端， 高交互性WEB应用程序的重担。轻松加入Web 2.0特性。		如果你最近体验了这个程序包，你很可能会发现文档并不是它的强项之一。像所有在我之前的开发者一样，我只能一头扎进prot...&nbsp;&nbsp;<a href='http://www.blogjava.net/zhuyan/articles/105759.html'>阅读全文</a><img src ="http://www.blogjava.net/zhuyan/aggbug/105759.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhuyan/" target="_blank">朱岩</a> 2007-03-23 10:46 <a href="http://www.blogjava.net/zhuyan/articles/105759.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>