有什么区别:
var div = document.createElement('div');//output -> [object HTMLDivElement]
document.getElementById('container').appendChild(div);
和
var div = '<div></div>';
document.getElementById('container').appendChild(div);//output -> <div></div>
不应该两者都一样吗?如果没有,我如何让第二个版本工作?
答案 0 :(得分:28)
后者只是一个包含HTML的字符串,而第一个是一个对象。首先,您需要appendChild
,而对于第二个,您需要附加到innerHTML
。
不应该都是一样的吗?而如果 不,我怎么得到第二个版本 工作?
var div = '<div></div>';
document.getElementById('container').innerHTML += div;
答案 1 :(得分:8)
使用JS / DOM引擎,以Element.appendChild
作为参数调用string
会导致创建新的Text
节点,然后添加。
您的第一个示例创建了一个<div>
元素。您的第二个示例创建了一个文本节点,其内容为<div></div>
。
你的第二个例子相当于:
var div = '<div></div>';
document.getElementById('container').appendChild(document.createTextNode(div));//output -> <div></div>
作为Sarfraz Ahmed mentioned in his answer,您可以通过编写第二个示例来实现您希望它的工作方式:
var div = '<div></div>';
document.getElementById('container').innerHTML = div;
答案 2 :(得分:4)
appendChild
确实需要某种HTMLDomNode,例如HTMLDivElement
,而不是字符串。它不知道如何处理字符串。你可以做到
document.getElementById('container').innerHTML += div;
但我真的更喜欢第一个版本;并且我更依赖它来在浏览器中表现相同。
答案 3 :(得分:2)
appendChild期待一个元素,所以当你发送文本时,它不知道该怎么做。您可能希望使用javascript库来简化某些工作,例如jQuery。你的代码是:
$('#container').append('<div></div>');
答案 4 :(得分:1)
最简单的解决方案并支持所有浏览器:
var div = '<div></div>';
var parser = new DOMParser();
var myDiv = parser.parseFromString( html, "text/xml" );
另一种解决方案可能是:
var div = '<div></div>';
var tmpDiv = document.createElement('div');
tmpDiv.innerHTML = div;
elDiv = tmpDiv.childNodes[0]; //Now it can be used as an element
答案 5 :(得分:0)
您也可以使用它们分别将元素附加/添加到DOM:
var elem = document.documentElement.appendChild(document.createElement(element));
var elem = document.documentElement.prepend(document.createElement(element));
并使用elem
变量来定位元素(例如):
elem.style.display = "block";
elem.style.remove();
elem.style.id = ...;
等