精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-03-31
最后修改:2011-04-01
Pro JavaScript Techniques中文版256页的例子代码有误, 原版给出的例子就已经错误了 while ( a.length ) {
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2011-04-14
总结的不错,受益非浅啊,谢谢LZ的分享
|
|
返回顶楼 | |
发表时间:2011-04-14
真的吗?getElementsByTagName('a')返回的NodeList称为LiveNodeList,即会根据DOM当前的状态有所变化
在循环中,有把a使用strong替换的逻辑,即这个a元素会消失,一但a元素从DOM中移除,那么他在这个NodeList中也会消失,导致list.length减1 最后这个length会变成0,因此我认为这个代码没有错误 |
|
返回顶楼 | |
发表时间:2011-04-14
同时我认为你的代码才是有问题的,会导致某些a元素没有被转成strong
不知你有没有试过这段代码 当然书中的代码确实有错误: 1、循环体里应该始终是a[0]而不是a[i],这里根本没有i 2、最后是a[0].parentNode.replaceChild,而不是直接对a[0]调用replaceChild 只不过错误不是你说的while的问题 |
|
返回顶楼 | |
发表时间:2011-04-14
好吧,你是从后到前的逆循环,那确实你的代码也没问题……
|
|
返回顶楼 | |
发表时间:2011-04-15
最后修改:2011-04-15
getElementsByTagName返回的确实是一个live NodeList, 注意不是LiveNodeList, 没有这个对象的, 所谓的live NodeList我的理解是这个NodeList会随着文档中DOM的变化而实时地得到更新.
<html> <head> <title>W3C DOM tests - NodeList</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> </head> <body> <a href=" www.163.com ">163</a> <a href=" www.sina.com ">新浪</a> <script type="text/javascript" > var a = document.getElementsByTagName("a"); alert('a.length before replace: '+a.length); while ( a.length ) { var s = document.createElement("strong"); s.appendChild( document.createTextNode( a[0].href ) ); //看看替换的元素也是a元素时这个NodeList会不会缩减 //var s = document.createElement('a'); //a.href = a[0].href; a[0].parentNode.replaceChild( s, a[0] ); alert('a.length after replace: '+a.length); } alert(a.length == false); </script> </body> </html> 再给出一个例子, 下面的代码会陷入无限循环:
var divs = document.getElementsByTagName("div"); for (var i=0; i < divs.length; i++){ var div = document.createElement(“div”); document.body.appendChild(div); } divs会随着document.body.appendChild(div)而得到更新 |
|
返回顶楼 | |
浏览 2168 次