是否有一种方法可以像这样转换HTML:

<div>
<a href="#"></a>
<span></span>
</div>

或任何其他HTML字符串到DOM元素?(这样我就可以使用appendChild())。我知道我可以做. innerhtml和. innertext,但这不是我想要的——我实际上希望能够将动态HTML字符串转换为DOM元素,以便我可以在. appendchild()中传递它。

更新:似乎有些混乱。我有一个字符串的HTML内容,作为JavaScript变量的值。文档中没有HTML内容。


当前回答

只需给元素一个id并正常处理即可。

<div id="dv">
<a href="#"></a>
<span></span>
</div>

现在你可以这样做:

var div = document.getElementById('dv');
div.appendChild(......);

或者使用jQuery:

$('#dv').get(0).appendChild(........);

其他回答

你可以这样做:

String.prototype.toDOM=function(){
  var d=document
     ,i
     ,a=d.createElement("div")
     ,b=d.createDocumentFragment();
  a.innerHTML=this;
  while(i=a.firstChild)b.appendChild(i);
  return b;
};

var foo="<img src='//placekitten.com/100/100'>foo<i>bar</i>".toDOM();
document.body.appendChild(foo);

看看John Resig的纯JavaScript HTML解析器。

编辑:如果你想让浏览器为你解析HTML, innerHTML正是你想要的。从这个SO问题中:

var tempDiv = document.createElement('div');
tempDiv.innerHTML = htmlString;

为什么不使用insertAdjacentHTML

例如:

// <div id="one">one</div> 
var d1 = document.getElementById('one'); 
d1.insertAdjacentHTML('afterend', '<div id="two">two</div>');

// At this point, the new structure is:
// <div id="one">one</div><div id="two">two</div>here

好吧,在我思考了其他人的答案之后,我自己想到了答案。: P

var htmlContent = ... // a response via AJAX containing HTML
var e = document.createElement('div');
e.setAttribute('style', 'display: none;');
e.innerHTML = htmlContent;
document.body.appendChild(e);
var htmlConvertedIntoDom = e.lastChild.childNodes; // the HTML converted into a DOM element :), now let's remove the
document.body.removeChild(e);

只需给元素一个id并正常处理即可。

<div id="dv">
<a href="#"></a>
<span></span>
</div>

现在你可以这样做:

var div = document.getElementById('dv');
div.appendChild(......);

或者使用jQuery:

$('#dv').get(0).appendChild(........);