2010-07-29 41 views
0

我想要一个当输入为HTML内容时返回正确DOM的Javascript函数。 我已经使用了相同的功能。这里输入的是HTML内容,输出是DOM。当输入为html内容时返回DOM的Javascript函数

function htmltoelement(elementHTML) 
{ 
    var temDiv = document.createElement('div'); 
    temDiv.innerHTML = elementHTML;   
    return temDiv; 
} 

此功能适用于Firefox,但不适用于IE浏览器或Chrome浏览器,当HTML损坏时。

我需要一个可以在所有浏览器上正常工作的功能的建议,即使HTML被破坏了。

+2

你能否澄清一下“即使HTML被破坏”?你的意思是输入本身不是有效的HTML? – 2010-07-29 12:44:44

+1

你为什么期望它能够处理破碎的HTML? – James 2010-07-29 12:46:22

+0

@ J-P - 我认为OP *可能意味着他们的印象是'.innerHTML'被破坏而不是输入,我认为这有点含糊/需要澄清。 – 2010-07-29 12:50:05

回答

3

使用“破损的”HTML(我假设它是无效的),它的解释方式主要取决于浏览器和浏览器所处的模式。顶部的DOCTYPE将决定如何解析innerHTML属性当它被设置。对于XHTML,它会给你一些奇怪的结果,因为“破碎的”HTML会让你的整个页面变得混乱。您使用的功能是正确的,但您似乎需要在尝试创建div之前检查输入是否符合规定。

+0

嘿,我同意你的看法,输入由用户这里给出,所以我不能限制用户插入唯一正确的HTML。即使HTML不正确,我也需要一个可以正常工作的函数。 – Dora 2010-07-30 06:11:38

+1

@Dora - 真的没有一个,你喂养一个程序无效的输入,输出将是不可预知的,*非常*不一致的跨浏览器。 – 2010-07-30 10:21:58

0

你可以写出来,以一个隐藏的iframe实现这一目标:

<iframe id="frame" style="display:none"></iframe> 
<script type="text/javascript"> 

function htmltoelement(elementHTML) 
{ 
    var temp = document.getElementById('frame'); 

    // Cross-browser way to get the iframe document 
    var idoc = (temp.contentWindow || temp.contentDocument); 
    if (idoc && idoc.document) idoc = idoc.document; 

    // Put the HTML in the iframe 
    idoc.write("<html><body>" + elementHTML + "</body></html>"); 
    temDiv = document.createElement('div'); 
    temDiv.innerHTML = idoc.body.innerHTML; 

    return temDiv; 
} 

document.body.appendChild(htmltoelement('<b><i>hi</b></i>')); 

</script> 

隐藏的iframe似乎是必要的,使用document.createElement(“IFRAME”)没有在Opera工作。

相关问题