论坛首页 Web前端技术论坛

如何使用字符串作为appendChild到页面的HTML元素?

浏览 8013 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2006-12-11  
可能问题问得不是很清楚,简单描述一下:

我们一般是通过 document.createElement("") 来创建HTML元素,但是这样就存在一个问题,必须在JS里写大量的 createElement 等代码,带来维护困难的烦恼,现在我想定义一个字符串变量,然后把这个字符串 appendChild 到页面上,例如以下代码:

<body>
<script language="JavaScript">
<!--
function test() {
	alert('test');	
}

var string = '<div style="background:red;width:300px;"><button onclick="' + test + '">HelloWorld</button></div>';

window.onload=function(){
	var div1 = document.getElementById("div1");
	var txtNode = document.createDocumentFragment(string);
//	div1.appendChild(txtNode);

	div1.innerHTML = string;
}
//-->
</script>
<div id="div1"></div>
</body>


先创建一个文档片断,然后我想把这个片断 appendChild 到div1,失败。
然后我用innerHTML,这个时候 button的onclick事件执行不了
文档片断是应该appendChild到页面的,但是这里为什么不行??
用innerHTML的话如果要保留之前的innerHTML并且要对新的HTML插入的位置做调整还是很麻烦,所以我不推荐使用innerHTML。

有什么好办法避免使用大量的 createElement 创建HTML元素????(要兼容firefox)
   发表时间:2006-12-11  
http://www.jackslocum.com/blog/examples/domhelper.php
dom没必要自己写,先找找工具!

对于w3cdom vs innerHTML可以看http://www.quirksmode.org/dom/innerhtml.html
innerHTML快很多。

clone Node你也可以考虑考虑。

<button onclick="test()">HelloWorld</button>
这样写才对吧?注册事件我觉得应该最后处理,通过prototype.jsEvent.on 或dojo的connect()等注册
0 请登录后投票
   发表时间:2006-12-11  
zkj_beyond,好久没看你的BLOG了,呵呵

DOM是没必要自己写,把dojo的DOM操作抽出来就可以了

innerHTML是比W3CDOM快很多,只是当你用innerHTML += 操作时需要对页面元素渲染多次,这样效率上会降低,所以用 createDocumentFragment 更好

至于我提出的问题只是觉得用 createElement 太麻烦,页面难以维护,因为在创建元素时你不能在代码里看到HTML元素的结构,dojo的templateString 就能看到元素的大概样子,但是看了dojo的实现也是用innerHTML,看来还是无法避免使用innerHTML。。。

我貌似有点将简单事情复杂化了 -.-!!
0 请登录后投票
   发表时间:2006-12-16  
var string = '<div style="background:red;width:300px;"><button onclick="test();">HelloWorld</button></div>';看看你的那句和我的是否一致。呵呵,其实你的onclick事件就写错了。看来你对onclick的用法不熟。改正过来onclick就会执行。
0 请登录后投票
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics