Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Javascript动态创建HTML元素?_Javascript_Html_Dom - Fatal编程技术网

使用Javascript动态创建HTML元素?

使用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

我想动态地创建一些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 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"}),
]);