首先我非常感谢这位兄弟的指正!其次我讲讲document.write()这个东东:
在客户端调用这个方法的时候分两种情况,一种是网页的HTML代码正在加载过程中的情况,另一种情况是网页已经全部加载之后再使用document.write()。
先说第二种情况吧,网页全部加载完毕之后(即发生onload事件之后)你若再使用document.write()的话,会把原来网页里的所有已经加载的HTML全部冲掉,有点类似于 document.documentElement.outerHTML 赋值,所以经常有人会犯这种错误,用这个方法把原本已经加载好的页面给“冲”掉了。
再说说第一种情况,加载过程中使用 document.write():网页的加载是按顺序加载的,即源代码里的前后顺序,写在前面的代码先加载。而在此过程中使用 document.write() 那就不是覆盖掉原有的HTML而是将write()产生的HTML代码与原来的HTML合在一个流里被浏览器加载。不信你可以自己做个测试页面:
<script>
for(var i=0; i<100; i++)
{
document.write(i +"<br>");
}
</script>
按照你的说法,前面使用了 document.write() 那后面就不能使用了,那么我写的这个例子,100次的循环使用这个方法应该报错的,但实现的结果你可以看看。非常感谢楼主的指正,楼主技术的钻研精神我很佩服。
在客户端调用这个方法的时候分两种情况,一种是网页的HTML代码正在加载过程中的情况,另一种情况是网页已经全部加载之后再使用document.write()。
先说第二种情况吧,网页全部加载完毕之后(即发生onload事件之后)你若再使用document.write()的话,会把原来网页里的所有已经加载的HTML全部冲掉,有点类似于 document.documentElement.outerHTML 赋值,所以经常有人会犯这种错误,用这个方法把原本已经加载好的页面给“冲”掉了。
再说说第一种情况,加载过程中使用 document.write():网页的加载是按顺序加载的,即源代码里的前后顺序,写在前面的代码先加载。而在此过程中使用 document.write() 那就不是覆盖掉原有的HTML而是将write()产生的HTML代码与原来的HTML合在一个流里被浏览器加载。不信你可以自己做个测试页面:
<script>
for(var i=0; i<100; i++)
{
document.write(i +"<br>");
}
</script>
按照你的说法,前面使用了 document.write() 那后面就不能使用了,那么我写的这个例子,100次的循环使用这个方法应该报错的,但实现的结果你可以看看。非常感谢楼主的指正,楼主技术的钻研精神我很佩服。
可是你假想用户使用
obj.innerHTML = tree.toString();//那就是第二种情况这种情况下当用户运行toString时,首先会调用setStyle
而setStyle里面直接有一个document.write(style);这样的话,是不是就会把网页的所有代码都冲掉呢实际上我已经遇到了这样的情况
这句代码若是在网页加载过程中被执行的话,应该属于第一种情况,不会出错。
若是这句代码你是放在某个函数里在页面onload之后再执行的话,那就会出现网页被冲掉的情况
如果我要"在网页加载过程中被执行"我肯定就用document.write(tree.toString());了