标签:
IT/科技innerhtml |
<html>
<head>
<script>
function Test(){
}
</script>
</head>
<body onload=Test();>
<span id="p"></span>
</doby>
</html>
innerTEXT与innerHTML的区别:
http://www.wujianrong.com/photo/420061017224724.gif
跨浏览器的设置innerHTML方法
很多人都可能遇到过这种情况:设置 innerHTML 的时候,插入的 HTML
代码中包含脚本,但这些脚本却不生效,或者在 IE
上生效在其它浏览器上就不生效。原因很简单:不同浏览器对插入
innerHTML 中的脚本有不同的处理方法。经过实践,归纳如下:
对于IE,首先 script 标签必须带 defer
属性,其次在插入时刻,innerHTML 的所属节点必须在 DOM 树中;对于
Firefox 和 Opera,在插入时刻,innerHTML 的所属节点不可以在 DOM
树中。
根据上面结论,给出通用的设置 innerHTML 方法:
var setInnerHTML = function (el, htmlCode) {
}
还有某些情况,我们事先不清楚要插入到 innerHTML 的 HTML 代码包含什么,如果包含 document.write 语句,那么就会破坏整个页面。对于这种情况,可以通过重新定义 document.write 来避免。代码如下:
document.write = function() {
}
在这篇文章编写之前,已经有一个比较完善的解决方法《让插入到 innerHTML
中的 script
跑起来》。比较起来,《让》给出的方法考虑得更细致,但处理起来比较繁琐,效率不高。而这里给出的方法则更简单,并且充分利用了浏览器的特性。
最近在做AJAX,想用javascript实现DataList功能,遇到一个棘手的问题,由于要生成的HTML很长,所以我写成如下的形式:
list.innerHTML="<table><tr>";
list.innerHTML+="<td>"
......
但是这样生成的innerHTML始终不对,研究了半天,原来是innerHTML搞得鬼.innerHTML自带了语法检查功能,他会自动把不完整的HTML代码补充完整.运行如下的一个测试代码就可以发现了.
document.getElementByIdx("AlbumList").innerHTML="<table><tr>";
alert(document.getElementByIdx("AlbumList").innerHTML);
他会自动把我的代码里面添加了<tbody>和</tr></table>等标记.神奇!!!
那么不让他自动填写的一个办法就是用一个中间变量:
var html="<table><tr>";
html+="<td>";
......
list.innerHTML=html;
就这样就可以解决问题了.