﻿<?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-飞翔的起点-随笔分类-javaScript</title><link>http://www.blogjava.net/forgood/category/31999.html</link><description>从这里出发</description><language>zh-cn</language><lastBuildDate>Sun, 30 Aug 2009 07:41:17 GMT</lastBuildDate><pubDate>Sun, 30 Aug 2009 07:41:17 GMT</pubDate><ttl>60</ttl><item><title>html中的&lt;base&gt;标签</title><link>http://www.blogjava.net/forgood/archive/2009/08/26/292617.html</link><dc:creator>forgood</dc:creator><author>forgood</author><pubDate>Wed, 26 Aug 2009 03:12:00 GMT</pubDate><guid>http://www.blogjava.net/forgood/archive/2009/08/26/292617.html</guid><wfw:comment>http://www.blogjava.net/forgood/comments/292617.html</wfw:comment><comments>http://www.blogjava.net/forgood/archive/2009/08/26/292617.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/forgood/comments/commentRss/292617.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/forgood/services/trackbacks/292617.html</trackback:ping><description><![CDATA[<p>有一次编网页的时候,把base 标签给删掉了,超链接怎么也行不通,老是路径不对,原来是base 标签在做怪:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#3366ff" size="2">&lt;base&gt;标记定义了文档的基础URL地址，在文档中所有的相对地址形式的URL都是相对于这里定义的URL而言的。一篇文档中的&lt;base&gt;标记不能多于一个，必须放于头部，并且应该在任何包含URL地址的语句之前。 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; （1）href 属性<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; href属性指定了文档的基础URL地址，该属性在&lt;base&gt;标记中是必须存在的。<br />
例如：如果希望将文档的基础URL定义为&#8220;www.abc.com&#8221;，则可以使用如下语句：<br />
&lt;base href = "www.abc.com"&gt; 当定义了基础URL地址之后，文档中所有引用的URL地址都从该基础URL地址开始，例如，对于上面的语句，如果文档中一个超级链接指向gsl/welcome.htm，则它实际上指向的是如下URL地址：www.abc.com/gsl/welcome.htm <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; （2）target<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; target属性同框架一起使用，它定义了当文档中的链接被点击后，在哪一个框架中展开页面。如果文档中超级链接没有明确指定展开页面的目标框架集，则就使用这里定义的地址代替。常用的target的属性值有：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _blank，表明在新窗口中打开链接指向的页面。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _self，在当前文档的框架中打开页面。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _parent，在当前文档的父窗口中打开页面。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _top，在链接所在的完整窗口中展开页面。</font></p>
<img src ="http://www.blogjava.net/forgood/aggbug/292617.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/forgood/" target="_blank">forgood</a> 2009-08-26 11:12 <a href="http://www.blogjava.net/forgood/archive/2009/08/26/292617.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>正则表达式学习资料</title><link>http://www.blogjava.net/forgood/archive/2009/07/19/287355.html</link><dc:creator>forgood</dc:creator><author>forgood</author><pubDate>Sun, 19 Jul 2009 10:03:00 GMT</pubDate><guid>http://www.blogjava.net/forgood/archive/2009/07/19/287355.html</guid><wfw:comment>http://www.blogjava.net/forgood/comments/287355.html</wfw:comment><comments>http://www.blogjava.net/forgood/archive/2009/07/19/287355.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/forgood/comments/commentRss/287355.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/forgood/services/trackbacks/287355.html</trackback:ping><description><![CDATA[<p>学习资源：<br />
</p>
<p><a href="http://www.cnblogs.com/jimmyzhang/archive/2007/10/24/936151.html" target="_blank">http://www.cnblogs.com/jimmyzhang/archive/2007/10/24/936151.html </a>（花上1-2个小时仔细学习，然后反复实践，能够很快上手）</p>
<p>正则表达式工具：<br />
</p>
<p>我首推RegexBuddy了。下面这个地址里有RegexBuddy3.2.1完整版的下载地址（如果你仔细浏览这个网站，会发现此人是一个正则表达式狂热分子）：</p>
<p><a href="http://iregex.org/blog/regexbuddy321.html" target="_blank">http://iregex.org/blog/regexbuddy321.html</a></p>
<img src ="http://www.blogjava.net/forgood/aggbug/287355.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/forgood/" target="_blank">forgood</a> 2009-07-19 18:03 <a href="http://www.blogjava.net/forgood/archive/2009/07/19/287355.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>js判断页面关闭的方法</title><link>http://www.blogjava.net/forgood/archive/2009/07/06/285722.html</link><dc:creator>forgood</dc:creator><author>forgood</author><pubDate>Mon, 06 Jul 2009 14:17:00 GMT</pubDate><guid>http://www.blogjava.net/forgood/archive/2009/07/06/285722.html</guid><wfw:comment>http://www.blogjava.net/forgood/comments/285722.html</wfw:comment><comments>http://www.blogjava.net/forgood/archive/2009/07/06/285722.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/forgood/comments/commentRss/285722.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/forgood/services/trackbacks/285722.html</trackback:ping><description><![CDATA[<p><font style="background-color: #b8fab8">1、&lt;script language="javascript"&gt; </font></p>
<p><font style="background-color: #b8fab8">window.onbeforeunload = function() </font></p>
<p><font style="background-color: #b8fab8">{ </font></p>
<p><font style="background-color: #b8fab8">&nbsp;if(((event.clientX &gt; document.body.clientWidth - 43) &amp;&amp; (event.clientY &lt; 23)) || event.altKey) {</font></p>
<p><font style="background-color: #b8fab8">&nbsp; window.event.returnValue = '关闭。';&nbsp;&nbsp;&nbsp; </font></p>
<p><font style="background-color: #b8fab8">&nbsp;} </font></p>
<p><font style="background-color: #b8fab8">}</font></p>
<p><font style="background-color: #b8fab8">&lt;/script&gt; </font></p>
<p><font style="background-color: #b8fab8">2、&lt;script language="javascript"&gt; </font></p>
<p><font style="background-color: #b8fab8">window.onbeforeunload = function() </font></p>
<p><font style="background-color: #b8fab8">{ </font></p>
<p><font style="background-color: #b8fab8">var n = window.event.screenX - window.screenLeft; </font></p>
<p><font style="background-color: #b8fab8">var b = n &gt; document.documentElement.scrollWidth-20;</font></p>
<p><font style="background-color: #b8fab8">if(b &amp;&amp; window.event.clientY &lt; 0 || window.event.altKey) </font></p>
<p><font style="background-color: #b8fab8">{ </font></p>
<p><font style="background-color: #b8fab8">alert("是关闭而非刷新"); </font></p>
<p><font style="background-color: #b8fab8">window.open(this.location);&nbsp; </font></p>
<p><font style="background-color: #b8fab8">//return false;</font></p>
<p><font style="background-color: #b8fab8">//window.event.returnValue = ""; }</font></p>
<p><font style="background-color: #b8fab8">} </font></p>
<p><font style="background-color: #b8fab8">&lt;/script&gt;</font></p>
<p><font style="background-color: #b8fab8"><br />
本文来自CSDN博客，转载请标明出处：http://blog.csdn.net/ajaxchen_615/archive/2009/07/06/4325917.aspx</font></p>
<img src ="http://www.blogjava.net/forgood/aggbug/285722.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/forgood/" target="_blank">forgood</a> 2009-07-06 22:17 <a href="http://www.blogjava.net/forgood/archive/2009/07/06/285722.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>js对象学习笔记（二）</title><link>http://www.blogjava.net/forgood/archive/2009/03/26/js.html</link><dc:creator>forgood</dc:creator><author>forgood</author><pubDate>Thu, 26 Mar 2009 06:32:00 GMT</pubDate><guid>http://www.blogjava.net/forgood/archive/2009/03/26/js.html</guid><wfw:comment>http://www.blogjava.net/forgood/comments/262114.html</wfw:comment><comments>http://www.blogjava.net/forgood/archive/2009/03/26/js.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/forgood/comments/commentRss/262114.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/forgood/services/trackbacks/262114.html</trackback:ping><description><![CDATA[<p><strong>1.对象和属性</strong></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;对象是一种复核数据类型，它们将多个数据值几种在一个单元中，而且允许使用名字来存取这些值，即对象是一个无序的属性集合，这个属性都有自己的名字和值，存储在对象中的以命名的值可以是数字和字符串这样的原始值，也可以是对象。</p>
<p><strong>2.对象的创建</strong></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;对象是由运算符new来创建的，在这个运算符之后必须有用于初始化对象的构造函数名。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;创建一个空对象（即没有属性的对象）</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;var o&nbsp;= new Object();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;js还支持内部构造函数，它们以另一种简洁的方式初始化新创建的对象</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;var now = new Date();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;var new_year = new Date(2009,09,19);</p>
<p><strong>3.属性的设置和查询</strong></p>
<p><strong>4.属性的枚举</strong></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;for/in循环列出的属性并<font color="#ff0000">没有特定顺序</font>，而且它只能枚举出所有用户定义的属性，但是却不能枚举出那些预定义的属性或方法,并且它可以</p>
<p>枚举出被设为undefined的属性，但是它不能列出被delete删除的属性。</p>
<p><strong>5.未定义的属性</strong></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;如果要读取一个不存在属性的值，那么得到的结果是一个特殊的js值，<font color="#ff0000">undefined</font></p>
<p><font color="#ff0000">&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ff0000">可以使用delete来删除一个对象的属性，注意：删除一个属性并不仅仅是把该属性设置为undefined，而是真正从对象中移除了该属性。</font></font></p>
<p><strong>6.构造函数</strong></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;它由new运算符调用，传递给它的是一个新创建的空对象引用，将该引用作为关键字this的值，而且它还要对新创建的对象进行适当的初始化。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;注意：构造函数如何使用它的参数来初始化this关键字所引用的对象的属性，记住，构造函数只是初始化了特定的对象，但并不返回这个对象。</p>
<p>&nbsp;&nbsp;&nbsp;<font color="#ff0000">&nbsp;构造函数通常没有返回值，他们只是初始化由this值传递进来的对象，并且什么也不返回..但是，构造函数可以返回一个对象值，如果这样做，被返回的对象就成了new表达式的值了，在这种情况下，</font></p>
<p><font color="#ff0000">this值所引用的对象就被丢弃了。</font></p>
<p><strong>7.方法</strong></p>
<p><font color="#ff0000">&nbsp;&nbsp;&nbsp;</font><font color="#000000">&nbsp;方法有一个非常重要的属性，即在方法主体内部，关键字this的值变成了调用该方法的对象。</font></p>
<p>&nbsp;&nbsp;&nbsp; 方法和函数的区别，其实他们没有什么技术上的差别，真正的区别存在于设计和目的上，方法是用来对this对象进行操作的，而函数通常是独立的，并不需要使用this对象。</p>
<p><strong>8.原型对象和继承</strong></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;js对象都&#8220;继承&#8221;原型对象的属性，每个对象都有原型对象，原型对象的所有属性是以它为原型的对象的属性，也就是说，每个对象都继承原型对象的所有属性，</p>
<p>&nbsp;&nbsp;&nbsp;<font color="#ff0000">&nbsp;一个对象的原型是有创建并初始化该对象的构造函数定义的，js中的所有函数都有prototype属性，它引用一个对象，虽然原型对象初始化时是空的，但是你在其中定义的任何属性都会被构造函数创建</font></p>
<p><font color="#ff0000">的所有对象继承。</font></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;构造函数定义了对象的类，并初始化了类中状态变量的属性，因为原型对象和构造函数关联在一起，所以类的每个成员都从原型对象继承了相同的属性，这说明原型对象是存放方法和其他常量属性的理</p>
<p>想场所。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;继承是在查询一个属性值时自动发生的，属性并非从原型对象赋值到新的对象的，他们只不过看起来像是那些对象的属性，有两点重要的含义，一是：使用原型对象可以大量减少每个对象对内存的需求</p>
<p>量，因为对象可以继承许多属性；而且即使属性在对象被创建之后才添加属性到它的原型对象中，对象也能够继承这些属性。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;属性的继承只发生在读属性值时，而在写属性值时不会发生。</p>
<p>&nbsp;&nbsp;&nbsp; 因为原型对象的属性被一个类的所有对象共享，所以通常只用他们来定义类中所有对象的相同的属性，这使得原型对象适合于方法定义，另外原型对象还适合于具有常量的属性的定义，</p>
<p><font color="#ff0000">a.原型和内部类</font></p>
<p><font color="#ff0000">&nbsp;不只是用户定义的类有原型对象，像内部类同样具有原型对象，也可以给他们赋值，</font></p>
<p><font color="#ff0000">e.g&nbsp;&nbsp;&nbsp; String.prototype.endsWith = function(o){</font></p>
<p><font color="#ff0000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return (e == this,charAt(this.length-1));</font></p>
<p><font color="#ff0000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</font></p>
<p><strong>9.面向对象的js</strong></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;在面向对象的程序设计中，共有的概念是强类型和支持以类为基础的继承机制，根据这个评判标准，就可以证明js不是面向对象语言。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;js对象可以具有大量的属性，而且还可以动态的将这些属性添加到对象中，这是对面对象c++和java做不到的，</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;虽然js没有类的概念，但是它用构造函数和原型对象模拟了类。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;js和以类为基础的面向对象语言中，同一个类可以具有多个对象，对象是它所属的那个类的实力，所以任何类都可以有多个实例，js中的命名延勇了java中的命名约定，即命名类时以大写字母开头，命名对象时以小写字母开头，类帮助我们区分代码中的类和对象。</p>
<p><strong>实例属性</strong></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;每个对象都有它自己单据的实力属性的副本，为了模拟面向对象的程序设计语言，js中的实例属性是那些在对象中用构造函数创建的或初始化的属性。</p>
<p><strong>实例方法</strong></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;实例方法和实例数据非常的相似，实例方法是由特定对象或实例调用的，实例方法使用了关键字this来引用他们要操作的对象或实例，但是和实例属性不同额一点是每个实例方法都是由类的所有实例共享的，<font color="#ff0000">在js中，给类定义一个实例方法，是通过把构造函数的原型对象中的一个属性设置为函数值类实现的，这样，由那个构造函数创建的所有对象都会共享一个以继承的对函数的引用，而且使用上面素数的方法调用语法就能够调用这个函数。</font></p>
<p><strong>类属性</strong></p>
<p>&nbsp;&nbsp;&nbsp;类属性是一个与类相关联的变量，而不是和类的每个实例相关联的变量，每个类属性只有一个副本，它是通过类存取的，可以简单的定义了构造函数自身的一个属性来定义类属性</p>
<p><strong>类方法</strong></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;类方法是一个与类关联在一起的方法，而不是和类的实例关联在一起的方法，要调用类方法，就必须使用类本身，而不是使用类的特定实例。由于类方法不能通过一个特定对象调用，所以使用关键字this对它来说没有意义，和类属性一样，类方法是全局性的，</p>
<p><strong>超类和子类</strong></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;面向对象语言中有类层次的概念，每个类都有一个超类，他们从超类中继承属性和方法，类还可以被扩展，或者说子类化，这样其他子类就能继承它的行为，js中继承是以原型为基础的，而不是以类基础的继承机制，但是我们仍旧能够总结出累世的类层次图，在js中，类Object是最通用的类，其他所有类都是专用化了的版本，或者说的是Object的子类，另一种解释方法是Object是所有内部类的超类，所有类都继承了Object的基本方法。</p>
<p>&nbsp;&nbsp;&nbsp;举例说明：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;类Complex的对象就继承了Complex.prototype对象的属性，而后者又继承了Object.prototype的属性，由此可以推出，对象Complex继承了两个对象的属性，在Complex对象中查询某个属性时，首先查询的是这个对象本身，如果在这个对喜爱那个中没有发现要查询的属性，就查询Complex.prototype对象，最后，如果在那个对象中还没有最后按到要查询的属性，就查询Object.prototype对象，注意类层次关系中的属性隐藏。参考P153</p>
<p><strong>10.作为关联数组的对象</strong></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;运算符&#8220;.&#8221;类存取一个对象属性，而数组更常用的存取书香运算赋是[],下面的两行代码是等价的：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;obj.property&nbsp;&nbsp; ====== obj["property"],他们的语法区别是，前者的属性名是标识符，后者的属性名却是一个字符串，</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;在c、c++、java和其他类似的强类型语言中，一个对象的属性数是固定，而且必须预定义这些属性的名字，由于js是一种弱类型语言，它并没有采用这一规则，所以在用js编写的程序，可以为对象创建任意数目的属性，但是当你采用&#8220;.&#8221;运算符来存取一个对象的属性时，属性名时是用标识符表示的，而js程序性中，标识符必须被逐字的输入，他们不是一种数据类型，因此程序不能对他们进行操作。</p>
<p>&nbsp;&nbsp;&nbsp;<strong>&nbsp;constructor属性</strong></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;每个对象都有constructor属性，它引用的是用来初始化该对象的构造函数。但是并不是所有的对象都具有自己唯一的constructor属性，相反，如果这个属性是从原型对象继承来的。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;js会为我们定义的每一个构造函数都创建一个原型对象，并且将那个对象赋给构造函数的prototype属性。<font color="#ff0000">但是之前没有说明原型对象初始时是非空的，在原型对象创建之初，它包括一个constructor属性， 用来引用构造函数，也就是说，如果有一个函数f，那么属性f.prototype.constructor就总是等于f的。</font></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;由于构造函数定义了一个对象的类，所以属性construtor在确定给定对象的类型时是一个功能强大的工具。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;并不能保证constructor属性总是存在的，例如，一个类的创建者可以用一个全新的对象来替换构造函数的原型对象，而新对象可能不具有有效的constructor属性。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p><strong>&nbsp;&nbsp;&nbsp;&nbsp;toString()方法</strong></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;<strong>toLocaleString()方法</strong></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;<strong>valueOf()方法</strong></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;js需要将一个对象转化成字符创之外的原型类型时，就调用它，这个函数返回的是能代表关键字this所引用的对象的值的数据。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;<strong>hasOwnProperty()</strong></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如果兑现局部定义了一个非继承的属性，属性名是由一个字符串实际参数指定的，那么该方法就返回true，否则，它将返回false。</p>
<p>&nbsp;<strong>&nbsp;&nbsp;&nbsp;propertyIsEnumerable()</strong></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如果对象定义了一个属性，属性名是由一个字符串实际参数指定的，而且该属性可以用for/in循环枚举出来，那么该方法返回true，否则返回false。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;注意：该方法只考虑对象直接定义的属性，而不考虑继承的属性，因为返回false可能是因为那个属性是不可枚举的，也可能是因为它虽然是可以枚举的，但却是个继承的属性。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;怎么判断一个属性是可枚举的？</p>
<p>&nbsp;&nbsp;&nbsp;<strong>&nbsp;isPrototypeOf()</strong></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如果调用对象是实际参数指定的对象的原型对象，该方法返回true，否则返回false，该方法的用途和对象的constructoe属性相似。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p><strong></strong>&nbsp;</p>
<p><strong></strong>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;</p>
 <img src ="http://www.blogjava.net/forgood/aggbug/262114.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/forgood/" target="_blank">forgood</a> 2009-03-26 14:32 <a href="http://www.blogjava.net/forgood/archive/2009/03/26/js.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>js中的函数学习（一）</title><link>http://www.blogjava.net/forgood/archive/2009/03/21/261186.html</link><dc:creator>forgood</dc:creator><author>forgood</author><pubDate>Sat, 21 Mar 2009 04:45:00 GMT</pubDate><guid>http://www.blogjava.net/forgood/archive/2009/03/21/261186.html</guid><wfw:comment>http://www.blogjava.net/forgood/comments/261186.html</wfw:comment><comments>http://www.blogjava.net/forgood/archive/2009/03/21/261186.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/forgood/comments/commentRss/261186.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/forgood/services/trackbacks/261186.html</trackback:ping><description><![CDATA[<p>1.函数</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;注意：定义函数时可以使用个数可变的参数，而且函数既可以有return语句，也可以没有return语句；如果函数不包含return语句，它就只执行函数体中的每条语句，然后返回给调用者undefined。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;使用运算符typeof来检测参数的数据类型，使用if(!param)return;来判断是否存在该参数，因为js是一种无类型语言，所以你不能给函数的参数制定一个数据类型，而且js也不会检测传递的数据是不是那个函数所需要的类型，如果参数很重要时，就使用前面介绍的运算符进行检测。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;不可变参数js的处理：如果传递的参数比函数需要的个数多，那么多余的几个参数被忽略掉，如果传递的参数比函数需要的个数少，那么多余的几个参数就会被赋予undefined，在大多数情况下，这回使得函数产生错误。</p>
<p>2.嵌套函数</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;a，函数定义中可以嵌套其他函数的定义，但是只能在在顶层全局代码和顶层函数代码中，不能出现在循环或条件语句中，并且这些限制只应用于由function语句声明的函数，函数直接量可以出现在任何js表达式中。</p>
<p>3.Function()构造函数</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;可以使用Function()构造函数和new运算符动态地定义函数， var f = new Function("x","y","return x*y;");它等价于：function f(x,y){return x*y;}</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;Function构造函数可以接受任意多个字符串参数，它的最后一个参数是函数的主体，其中可以包含任何js语句，语句之间用分号分隔。由于传递给构造函数Function()的参数中没有一个用于说明它要创建的函数名，用Function()构造函数创建的未命名函数有时被称作为&#8220;匿名函数&#8221;。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;Function()函数存在的意义：因为Function()构造函数允许我们动态地建立和编译一个函数，它不会将我们限制在function语句预编译的函数体中；另一个原因是它能将函数定义为js表达式的一部分，而不是将其定义为一个语句；缺点是：这样做每次调用一个函数时，Function()构造函数都要对它进行编译，</p>
<p>4.函数直接量</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;函数直接量是一个表达式，它可以定义匿名函数。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;function f(x){return x*x;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//function语句</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;var f = new Function("x","return x*x;");&nbsp;&nbsp;&nbsp; //Function()构造函数</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;var f = function(X){return x*x;};&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //函数直接量</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;虽然函数直接量创建的是未命名函数，但是它的语法也规定它可以指定函数名，这在编写调用自身的递归函数时特别的有用，e.g</p>
<p>var f= function fact(x){if(x&lt;=1)return 1; else return x*fact(x-1);}</p>
<p>总结：function()函数可以任意的使用，具有通用性，Function()函数和函数直接量具有很多的相似性，他们都是未命名函数（函数直接量可以有函数名，尤其是在子调用函数中），函数直接量有个重要的有点，函数直接量<font color="#ff0000">只被解析和编译一次</font>，而作为字符串传递给Function()构造函数的js代码则在<font color="#ff0000">每次</font>调用构造函数时只需要被解析和编译一次。</p>
<p>函数最重要的特性就是他们能够被定义和调用，但是在js中函数并不只是一种语法，还可以是数据，可以把函数赋给变量、存储在对象的属性中或存储在数组的元素中，传递给函数。其实函数名并没有什么实际意义，它只是保存函数的变量的名字，可以将这个函数赋给其他的变量，它仍然以相同的方式起作用，</p>
<p>e.g&nbsp;&nbsp;&nbsp;&nbsp;function square(x){x*x;}</p>
<p>var a = square(4);</p>
<p>var b = square;//这种情况下b引用的函数和square的作用相同</p>
<p>var c = b(5);</p>
<p>除了赋给全局变量之外，还可以将函数赋给对象的属性，这是称函数为方法;也可以赋给数组元素。</p>
<p>e.g </p>
<p>&nbsp;&nbsp;&nbsp; var a =&nbsp; new Object;&nbsp;&nbsp;&nbsp;&nbsp; var a = new Object();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;a.square = new Function("x","return x*x";);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;y = o.square(16);</p>
<p>e.g&nbsp;&nbsp;&nbsp; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;var a = new Array(3);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;a[0] = function(x){return x*x;};</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;a[1] = 20;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;a[2] = a[0](a[1]);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;除这些之外，如何将函数作为参数传递给其他函数，</p>
<p>e.g </p>
<p>function&nbsp; add(x,y){return x+y;}</p>
<p>function subtract(x,y){return x-y;}</p>
<p>function multiply(x,y){return x*y;}</p>
<p>function dibide(x,y){return x/y;}</p>
<p>function operate(operator,operand1,operand2){</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;return operator(operand1,operand2);</p>
<p>}</p>
<p>var i = operate(add,operate(add,2,3),operate(multiply,4,5));</p>
<p>var operators = new Object();</p>
<p>operators["add"] = function(x,y){return x+y;}</p>
<p>operators["multiply"] = function(x,y){return x*y;}</p>
<p>operators["divide"] = function(x,y){return x/y;}</p>
<p>operators["pow"] = Math.pow;</p>
<p>function operate2(op_name,operand1,operand2){</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;if(operators[op_name] == null)return "unknow operator";</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;&nbsp;&nbsp;&nbsp;return operators[op_name](operand1,operand2);</p>
<p>}</p>
<p>var j = operate2('add',"hello",operate2("add","","world"));</p>
<p>var k = operate2('pow',10,2);</p>
<p>5.函数的作用域，调用对象</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;函数的作用域中除了全局变量、函数内部的局部变量和形式参数外，函数还定义了一个特殊属性，</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ff0000">arguments</font>，这个属性应用了另外一个特殊的对象<font color="#ff0000">-----Arguments对象，</font><font color="#000000">因为arguments属性是调用对象的一个属性，所以它的状态和局部变量以及函数的形式参数是相同的。</font></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;所以arguments标识符被看做是保留字，不能将它作为变量名或形式参数名。</p>
<p>6.Arguments对象</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;arguments它具有特殊的意义，是调用对象的一个特殊属性，用来引用Arguments对象，Arguments对象就像数组，可以按照数字获取传递给函数的参数值，但是它并非真正的Array对象。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;arguments具有length属性，</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;可以使用arguments来检测调用函数使用了正确数目的实际参数，</p>
<p>注意：arguments并非真正的数组，它是一个Arguments对象，Arguments对象有一个非同寻常的特征，当函数具有命名了的参数时，Arguments对象的数组元素是存放函数参数的局部变量的同义词。</p>
<p>e.g&nbsp; </p>
<p>&nbsp; function(x){</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;alert(x);&nbsp; //显示参数的初始值</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;arguments[0] = null;//改变数组预算也会改变x</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;alert(x);&nbsp; //现在显示为&#8220;null&#8221;</p>
<p>除了数组元素，Arguments对象还定义了callee属性，用来引用当前正在执行的函数，这对未命名的函数调用自身非常有用。</p>
<p>e.g</p>
<p>&nbsp;function(x){</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;if(x&lt;-1)return 1;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;return x*arguments.callee(x-1);</p>
<p>}</p>
<p>7.函数的属性和方法</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;由于函数是对象，所以它具有数据和方法。</p>
<p>函数的length属性</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;函数的属性length和arguments属性的length不同，arguments数组的length属性指定了<font color="#ff0000">传递给</font>该函数的实际参数数目，并且<font color="#ff0000">arguments属性的length只在函数内部起作用</font>，而函数自身的length属性它是只读的，返回的是<font color="#ff0000">函数需要的实际参数</font>的数目，并且<font color="#ff0000">函数的属性length函数体的内部和外部都在是有效的</font>。</p>
<p>函数的prototype属性</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;每个函数都有一个prototype属性，它引用的是预定义的原型对象，原型对象在使用new运算符把函数作为构造函数时起作用。</p>
<p>函数自定义属性</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;有时候定义全局变量比较乱，可以通过自定义函数属性来解决</p>
<p>函数的apply()和call()方法</p>
<h1>&nbsp;&nbsp;&nbsp;&nbsp;他们的第一个参数都是要调用的函数的对象，在函数体内这一参数是关键字this的值，call()的剩余参数是传递给要调用的函数的值，apply()的剩余参数是由数组指定的参数。</h1>
<img src ="http://www.blogjava.net/forgood/aggbug/261186.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/forgood/" target="_blank">forgood</a> 2009-03-21 12:45 <a href="http://www.blogjava.net/forgood/archive/2009/03/21/261186.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>文档树doc的介绍</title><link>http://www.blogjava.net/forgood/archive/2008/08/15/222210.html</link><dc:creator>forgood</dc:creator><author>forgood</author><pubDate>Fri, 15 Aug 2008 04:47:00 GMT</pubDate><guid>http://www.blogjava.net/forgood/archive/2008/08/15/222210.html</guid><wfw:comment>http://www.blogjava.net/forgood/comments/222210.html</wfw:comment><comments>http://www.blogjava.net/forgood/archive/2008/08/15/222210.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/forgood/comments/commentRss/222210.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/forgood/services/trackbacks/222210.html</trackback:ping><description><![CDATA[<table class="pageLighter" cellspacing="11" cellpadding="0" width="100%" border="0">
    <tbody>
        <tr>
            <td class="content">
            <p>先来看一张简单的文档树<br />
            <a class="page" href="http://www.98xj1.com/dom/img/nodes1.gif" target="_blank"><img alt="click for full size" src="http://www.98xj1.com/dom/img/nodes1.gif" border="0" /></a><br />
            很明显树的顶层节点是NodeA节点,接下来可以通过指定的合适节点移动到树中的任何点,结合以下的代码你可以更好的了解这棵树节点间的相互关系:<br />
            NodeA.firstChild = NodeA1 <br />
            NodeA.lastChild = NodeA3 <br />
            NodeA.childNodes.length = 3 <br />
            NodeA.childNodes［0］ = NodeA1 <br />
            NodeA.childNodes［1］ = NodeA2 <br />
            NodeA.childNodes［2］ = NodeA3 <br />
            NodeA1.parentNode = NodeA <br />
            NodeA1.nextSibling = NodeA2 <br />
            NodeA3.prevSibling = NodeA2 <br />
            NodeA3.nextSibling = null <br />
            NodeA.lastChild.firstChild = NodeA3a <br />
            NodeA3b.parentNode.parentNode = NodeA<br />
            <br />
            DOM定义对操作一个文档对象的节点结构提供了实用的方法,它提供了像执行对象插入,更新,删除,克隆等这些常用的方法。<br />
            insertBefore()--在参考子节点之前插入一个新的子节点.如果参考的子节点为null,则新的子节点将作为调用节点的最后一个子节点插入。<br />
            replaceChild()--在childNodes集合种使用指定的newChild来代替oldChild;如果代替成功,则返回oldChild;如果newChild是null,则只需删除oldChild即可。<br />
            removeChild()--从节点的ChildNodes集合中删除removeChild指定的节点,如果删除成功,则返回删除的子节点。<br />
            appendChild()--添加一个新节点到childNodes集合的末尾,如果成功,则返回新节点。<br />
            cloneNode()--创建一个新的、复制的节点,并且如果传入的参数是true时,还将复制子节点,如果节点是一个元素,那么还将复制相应属性,返回新的节点。<br />
            <br />
            为了在一棵文档树中访问或者建立一个新的节点,可以用下面这些方法:<br />
            getElementById()<br />
            getElementsByTagName()<br />
            createElement()<br />
            createAttribute()<br />
            createTextNode()<br />
            注意:在一个页面中只有一个文档对象,除了getElementsByTagName()外,其它方法均只能通过document.methodName()调用。<br />
            <br />
            再看一下下面这个例子:<br />
            &lt;html&gt;<br />
            &lt;head&gt;<br />
            &lt;title&gt;&lt;/title&gt;<br />
            &lt;/head&gt;<br />
            &lt;body&gt;<br />
            &lt;p&gt;This is a sample paragraph.&lt;/p&gt;<br />
            &lt;SCRIPT LANGUAGE="JavaScript"&gt;<br />
            &lt;!--<br />
            alert(document.documentElement.lastChild.firstChild.tagName);<br />
            //--&gt;<br />
            &lt;/SCRIPT&gt;<br />
            &lt;/body&gt;<br />
            &lt;/html&gt;<br />
            结果将会显示"P",下面是一些解释<br />
            document.documentElement - gives the page's HTML tag. <br />
            lastChild - gives the BODY tag. <br />
            firstChild - gives the first element in the BODY. <br />
            tagName - gives that element's tag name, "P" in this case.<br />
            另一个:<br />
            &lt;html&gt;<br />
            &lt;head&gt;<br />
            &lt;title&gt;&lt;/title&gt;<br />
            &lt;/head&gt;<br />
            &lt;body&gt;<br />
            <br />
            &lt;p&gt;This is a sample paragraph.&lt;/p&gt;<br />
            &lt;SCRIPT LANGUAGE="JavaScript"&gt;<br />
            &lt;!--<br />
            alert(document.documentElement.lastChild.firstChild.tagName);<br />
            //--&gt;<br />
            &lt;/SCRIPT&gt;<br />
            &lt;/body&gt;<br />
            &lt;/html&gt;<br />
            这个例子和上面并没有什么大的区别,仅仅是多了一个空行,但是在NS中,会自动为空行加上一个节点所以返回值是"undefined",而在IE中将跳过空行仍然指向P标签。<br />
            <br />
            更常用的方法:<br />
            &lt;p id="myParagraph"&gt;This is a sample paragraph.&lt;/p&gt;<br />
            ...<br />
            alert(document.getElementById("myParagraph").tagName);<br />
            这种方法你不用关心节点在文档树的哪一个地方,而只要保证在页面中它的ID号是唯一的就可以了。<br />
            <br />
            接下来一种访问元素节点的方法是document.getElementsByTagName(),它的返回值是一个数组,例如你可以通过下面的例子改变整个页面的连接：<br />
            var nodeList = document.getElementsByTagName("A");<br />
            for (var i = 0; i &lt; nodeList.length; i++)<br />
            nodeList[i].style.color = "#ff0000";<br />
            <br />
            attribute和attributes<br />
            attribute对象和元素相关,但是却没有被认为是文档树的一部分,因此属性不能作为子节点集合的一部分来使用。<br />
            有三种方法可以为元素建立新的属性<br />
            1.<br />
            var attr = document.createAttribute("myAttribute");<br />
            attr.value = "myValue";<br />
            var el = document.getElementById("myParagraph");<br />
            el.setAttributeNode(attr);<br />
            2.<br />
            var el = document.getElementById("myParagraph");<br />
            el.setAttribute("myAttribute", "myValue");<br />
            3.<br />
            var el = document.getElementById("myParagraph");<br />
            el.myAttribute = "myValue";<br />
            你可以在html标签种定义自己的属性:<br />
            &lt;p id="myParagraph" myAttribute="myValue"&gt;This is a sample paragraph.&lt;/p&gt;<br />
            ...<br />
            alert(document.getElementById("myParagraph").getAttribute("myAttribute"));<br />
            返回值将是"myValue".但是请注意这里必须使用getAttribute,而不是AttributeName,因为有一些浏览器并不支持自定义属性。<br />
            <br />
            attributes也可以被轻易的从一个元素中删除,你可以使用removeAttribute()或者将element.attributeName指向一个null值。<br />
            通过attributes我们就可以产生一些动态效果：<br />
            &lt;p id="sample1" align="left"&gt;Text in a paragraph element.&lt;/p&gt;<br />
            ... code for the links ...<br />
            document.getElementById('sample1').setAttribute('align', 'left');<br />
            document.getElementById('sample1').setAttribute('align', 'right');<br />
            另一种:<br />
            &lt;p id="sample2" style="text-align:left;"&gt;Text in a paragraph<br />
            element.&lt;/p&gt;<br />
            ... code for the links ...<br />
            document.getElementById('sample2').style.textAlign = 'left';<br />
            document.getElementById('sample2').style.textAlign = 'right';<br />
            跟上面的例子一样,展示了可用通过元素修改style中的属性,甚至是class中的.唯一要提到的是textAlign是从style中的text-align中演变而来的,有一条基本规律,就是style中的属性如果出现-则在dom中将会被去掉并且随后的一个字母将改为大写,还有一点就是如果即使元素中没有style属性,上述例子同样可以使用。<br />
            <br />
            text nodes:<br />
            先看一下例子：<br />
            &lt;p id="sample1"&gt;This is the initial text.&lt;/p&gt;<br />
            ... code for the links ...<br />
            document.getElementById('sample1').firstChild.nodeValue =<br />
            'Once upon a time...';<br />
            document.getElementById('sample1').firstChild.nodeValue =<br />
            '...in a galaxy far, far away';<br />
            首先text nodes并没有像elements那样具有id属性,所有它并不能直接通过document.getElementById()或者document.getElementsByTagName()访问<br />
            看一下下面的结构也许会更明白一些：<br />
            <a class="page" href="http://www.98xj1.com/dom/img/nodes2.gif" target="_blank"><img alt="click for full size" src="http://www.98xj1.com/dom/img/nodes2.gif" border="0" /></a><br />
            可以看出通过document.getElementById('sample1').firstChild.nodeValue就可以读取或者设置text nodes的值了。<br />
            <br />
            另一个更加复杂一点的例子：<br />
            &lt;p id="sample2"&gt;This is the &lt;b&gt;initial&lt;/b&gt; text.&lt;/p&gt;<br />
            它的文档结构<br />
            <a class="page" href="http://www.98xj1.com/dom/img/nodes3.gif" target="_blank"><img alt="click for full size" src="http://www.98xj1.com/dom/img/nodes3.gif" border="0" /></a><br />
            在这里通过document.getElementById('sample1').firstChild.nodeValue讲仅仅改变"This is the"<br />
            而<strong>initial</strong> text.将不会改变.在这里大家应该看到了它和innerHTML的不同了.当然你也可以这样用：<br />
            document.getElementById('sample3').firstChild.nodeValue =<br />
            '&lt;b&gt;Once&lt;/b&gt; upon a time...';<br />
            document.getElementById('sample3').firstChild.nodeValue =<br />
            '...in a galaxy &lt;i&gt;far, far&lt;/i&gt; away';<br />
            其中的html代码将不会被解释,浏览器将把他们当成普通的文本来显示。<br />
            <br />
            创建和删除text nodes:<br />
            var myTextNode = document.createTextNode("my text");<br />
            通过上面的代码你可以创建一个新的text node,但是它并不是文档树的一部分,要让它显示在页面上就必须让它成为文档树中某一个节点的child,因为<br />
            text nodes不能有儿子,所以你不能将它加入到一个text nodes中,attribute也不属于文档树的一部分,这条路也不行,现在只剩下elements nodes<br />
            了,以下的例子展示了如何添加和删除一个text node：<br />
            &lt;p id="sample1"&gt;Initial text within a paragraph element.&lt;/p&gt;<br />
            ... code to add a text node ...<br />
            var text = document.createTextNode(" new text " + (++counter1));<br />
            var el = document.getElementById("sample1");<br />
            el.appendChild(text);<br />
            ... code to remove the last child node ...<br />
            var el = document.getElementById("sample1");<br />
            if (el.hasChildNodes())<br />
            el.removeChild(el.lastChild);<br />
            增加文本是很容易的,上面的代码建立了一个新的text node并且通过appendChild()方法将其加入到childNodes数组的末尾,并设置了一个counter1的全局变量,利于观察<br />
            hasChildNodes()的返回值是true or false;用来判断当前节点是否还有child,以阻止当其没有child的时候调用removeChild()产生的错误。<br />
            <br />
            创建element nodes<br />
            有了上面的基础,应该更容易理解了,先看一下下面的代码<br />
            &lt;div id="sample1"&gt;This text is in a DIV element.&lt;/div&gt;<br />
            ... code for the link ...<br />
            var paraEl, boldEl;<br />
            paraEl = document.createElement("p");<br />
            boldEl = document.createElement("b");<br />
            paraEl.appendChild(document.createTextNode("This is a new paragraph with "));<br />
            boldEl.appendChild(document.createTextNode("bold"));<br />
            paraEl.appendChild(boldEl);<br />
            paraEl.appendChild(document.createTextNode(" text added to the DIV"));<br />
            document.getElementById("sample1").appendChild(paraEl);<br />
            你还可以直接为新加的element nodes设置attribute,以下两种都可以:<br />
            boldEl.style.color = "#ffff00";<br />
            paraEl.appendChild(boldEl);<br />
            或者:<br />
            paraEl.appendChild(boldEl);<br />
            boldEl.style.color = "#ffff00";</p>
            </td>
        </tr>
    </tbody>
</table>
<img src ="http://www.blogjava.net/forgood/aggbug/222210.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/forgood/" target="_blank">forgood</a> 2008-08-15 12:47 <a href="http://www.blogjava.net/forgood/archive/2008/08/15/222210.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>