<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
<wml xml:lang="zh">
<head>
<meta http-equiv="Content-Type" content="text/vnd.wap.wml; charset=utf-8"/>
<meta http-equiv="Cache-Control" content="no-cache"/></head>
<card title="Javascript 每日测试 - 第八期 - Gracecode.com">
<p>继续我们今天的 Javascript 每日测试时间，今天的题目是</p>

<pre>&lt;ul id=&quot;demo&quot;&gt;
    &lt;li&gt;a&lt;/li&gt;
    &lt;li&gt;b&lt;/li&gt;
    &lt;li&gt;c&lt;/li&gt;
&lt;/ul&gt;

&lt;script type=&quot;text/javascript&quot;&gt;
var ul = document.getElementById('demo');
var liList = ul.getElementsByTagName('li');

for (var i = 0; i &lt; liList.length; ++i) {
    ul.removeChild(liList[i]);
}
&lt;/script&gt;

请问脚本执行的结果是什么？</pre><p>“<a href="http://www.quirksmode.org/dom/getElementsByTagNames.html" title="http://www.quirksmode.org/dom/getElementsByTagNames.html">在 PPK 这本书中提及过</a>，getElementsByTagName（tag）返回的 HTML 数组 是会自己动态更新的，并非静态的列表。” -- from 明城</p>

<p>“更正一下，其实更准确的表述，getElementsByTagName（tag）返回的是 NodeList， 而不是 Array 。” -- from 小马</p>

<p>如何避免这样的问题？其一，可以换一种循环方式，使用 --i，或者 while 循环，只要代码清晰可读。比如</p>

<pre>for(var i = liList.length - 1; i &gt;= 0; i--) {
    ul.removeChild(liList[i]);
}</pre><p>这样就可以解决上述的问题（<a href="http://www.gracecode.com/Archive/Display/1314" title="http://www.gracecode.com/Archive/Display/1314">来源</a>）。</p>

<p>其二，是看情况。比较极端的例子，比如是希望把所有子节点都清除的话，可以直接使用 玉伯 提供的方法</p>

<pre>parentNode.innerHTML = '';</pre><p>有关 innerHTML 效率问题，以目前的电脑硬件而言，排除异常复杂的页面或者逻辑，性能方面应该是非常理想的。</p>

<p>“<a href="http://www.planabc.net/2008/03/04/innerhtml_and_dom_methods/" title="http://www.planabc.net/2008/03/04/innerhtml_and_dom_methods/">当然，有关 innerHTML 效率方面，还可以改进提高</a>” -- from 圆心。</p>


<p>
<a href="http://www.gracecode.com/wap/">Gracecode.com</a> |
<a href="http://www.gracecode.com/wap/d/2068 ">Permalink</a>(<a href="http://www.gracecode.com/Archive/Display/2068 ">xHTML</a>) |
<a href="http://www.gracecode.com/Trackback/Recieve/2068/camruw">Trackback</a> |
<a href="http://rss.gracecode.com">Rss</a>
</p>
</card>
</wml>