使用Javascript动态创建HTML元素?
我想动态地创建一些HTML元素(3个HTML元素),然后将此HTML代码作为变量中的字符串返回。我不想将下面函数中的HTML代码写入某个div,但是,我想在var中返回它使用Javascript动态创建HTML元素?,javascript,html,dom,Javascript,Html,Dom,我想动态地创建一些HTML元素(3个HTML元素),然后将此HTML代码作为变量中的字符串返回。我不想将下面函数中的HTML代码写入某个div,但是,我想在var中返回它 function createMyElements(id1,id2,id3){ //create anchor with id1 //create div with id 2 //create xyz with id3 //now return the html code of above creat
function createMyElements(id1,id2,id3){
//create anchor with id1
//create div with id 2
//create xyz with id3
//now return the html code of above created just now
}
如何实现这一点?您可以在一个变量中将html构造为字符串,如
var html = "";
html += "<a id='" + id1 +"'>link</a>";
html += "<div id='" + id1 +"'>div</div>";
// ... and so on
您可以使用
document.createElement
创建元素。创建后,可以添加属性。如果希望元素显示在文档中,则必须在文档的DOM树中插入。尝试使用以下代码:
var body = document.getElementsByTagName('body')[0],
newdiv = document.createElement('div'); //create a div
newdiv.id = 'newid'; //add an id
body.appendChild(newdiv); //append to the doc.body
body.insertBefore(newdiv,body.firstChild) //OR insert it
如果您只需要html,这是一种方法:
function createmyElements(id1,id2,id3){
return [
'<a href="some link" id="',
id1,
'">linktxt</a>',
'<div id="" ',
id2,
'"></div>',
'<someElement id="',
id3,
'"></someElement>'
].join('\n');
}
函数createmyElements(id1、id2、id3){
返回[
'',
“Html:
使用documentFragment而不是直接添加元素的主要原因是执行速度
在这种大小下并不重要,但当您开始添加数百个元素时,您将首先在内存中执行此操作:-)
使用documentFragment,您可以在内存中构建整个DOM元素树,直到最后一刻才影响浏览器DOM
否则,它会强制浏览器更新每个元素,这有时会让人感到非常痛苦。下面是将html页面(静态)转换为基于javascript的html页面(动态)的简单示例
比如说,您的html页面是“index.html”(在这里调用index_static.html)
index\u static.html
<!DOCTYPE HTML>
<html>
<head>
<title>Test</title>
</head>
<body>
<h1> Hello !!! </h1>
</body>
</html>
<script language="JavaScript" src="dynamic.js"></script>
现在,静态_index.html的动态版本如下所示:
index\u dynamic.html
<!DOCTYPE HTML>
<html>
<head>
<title>Test</title>
</head>
<body>
<h1> Hello !!! </h1>
</body>
</html>
<script language="JavaScript" src="dynamic.js"></script>
在浏览器上打开index_dynamic.html以验证该网页(尽管是动态的,但始终是动态的)
如果要重复执行此操作(动态创建HTML),可能需要使用更通用的方法
如果要创建三个不相关的元素,可以执行以下操作:
var anchor = elem("a", {"id":"id1"});
var div = elem("div", {"id":"id2"});
var xyz = elem("div", {"id":"id3"});
现在,您有三个元素。如果您想获得这些元素的HTML(作为字符串),只需执行以下操作:
var html = anchor.outerHTML + div.outerHTML + xyz.outerHTML;
如果要将这三个元素包含在一个元素中(例如,div),请执行以下操作:
您可以使用div.outerHTML
获取HTML,也可以将其附加到任何需要的地方
要了解有关elem()
的更多信息,请访问
我添加这个答案不是为了回答这个8年前的问题,而是为了未来的访问者。希望它能有所帮助。您是想创建元素
,还是想创建元素的字符串
表示法?变量中元素的html代码,最后我将创建document.getElementbyID(“yu”).innerHTML=var_containing_code您可以使用JS和innerHTML的Temlate文本:我记得在上一次会议上讨论过这个问题:使用内存中的div与使用documentFragment相比应该没有缺点。讨论可以找到@。我想Tim Down说得有道理。另外,您可能想阅读Raziel的评论(2008年7月30日下午1:10)@@Kooilnc感谢这两个指针。尤其是后面的指针。主要的一点仍然是在内存中创建元素的优点,而不是在进行操作时将它们添加到DOM中。但我们在这一部分进行了讨论。我想说,和您一样,将元素添加到documentFragment或任何其他内存节点都不重要。我仍然喜欢documentFragment的一个原因是可读性,因为很明显,该片段不是DOM的一部分。但在我尝过它之前,这是一个品味问题,而不是:-)我实际上做了一些简单的测试:。而且似乎使用document.createElement('div'));比document.createDocumentFragment()快一点;希望这对某人有所帮助:)JavaScript有一些可爱的DOM方法,可以为您处理转义之类的事情,同时提供比这种容易出错的字符串混搭更可读的语法。是的,我知道,您甚至可以使用jquery做得更好,更不容易出错。这是错误的方法,不要这样编写代码。您可以快速实现它但是以后你会觉得自己很笨。
<script language="JavaScript" src="dynamic.js"></script>
var anchor = elem("a", {"id":"id1"});
var div = elem("div", {"id":"id2"});
var xyz = elem("div", {"id":"id3"});
var html = anchor.outerHTML + div.outerHTML + xyz.outerHTML;
var div = elem("div", null, [
elem("a", {"id":"id1"}),
elem("div", {"id":"id2"}),
elem("div", {"id":"id3"}),
]);