2011-11-21 45 views
1

的内部格式。当我选择在我的网站有一定的博客文章“查看页面源代码”,我看到了正确的结果:如何保存原始XML/HTML和预标签

<variable name="myPublicVar" type="String"> 
    <metadata name="MemberMetaExamplePublic" /> 
</variable> 
<accessor name="myAccessor" access="readwrite" type="Boolean" declaredBy="MetadataTest"> 
    <metadata name="MemberMetaExampleGetter" /> 
</accessor> 
<method name="myMethod" declaredBy="MetadataTest" returnType="void"> 
    <metadata name="MemberMetaExampleMethod" /> 
</method> 
<metadata name="CustomMeta"> 
    <arg key="param1" value="foo" /> 
    <arg key="param2" value="bar "/> 
</metadata> 

但是当我用jQuery替换'<'和'>'到'& lt;'和'& gt;'分别由浏览器(在Chrome)所呈现的结果弄乱自闭合元件:

<variable name="myPublicVar" type="String"> 
    <metadata name="MemberMetaExamplePublic"> 
</metadata></variable> 
<accessor name="myAccessor" access="readwrite" type="Boolean" declaredby="MetadataTest"> 
    <metadata name="MemberMetaExampleGetter"> 
</metadata></accessor> 
<method name="myMethod" declaredby="MetadataTest" returntype="void"> 
    <metadata name="MemberMetaExampleMethod"> 
</metadata></method> 
<metadata name="CustomMeta"> 
    <arg key="param1" value="foo"> 
    <arg key="param2" value="bar "> 
</arg></arg></metadata> 

通知如何<metadata>元件不必要地产生一个结束标记,和如何在最后一个所述两个<arg>元件错误地生成结束标签实际上将一个<arg>包裹到另一个<arg>中。

我使用的转换发生在jQuery的/ JavaScript代码本节:

$('pre.raw').each(function(pIndex, pDIV) { 
    pDIV.innerHTML = pDIV.innerHTML.replace(/\</g, "&lt;").replace(/\>/g, "&gt;"); 
}); 

可以做些什么来阻止被解析的代码?我不确定浏览器是否应该归咎于jQuery或JavaScript?

注意:尽管我在Wordpress中遇到了这个问题,并且我可以在wordpress.stackexchange.com网站上询问这个问题,但我认为这是一个通用的问题,可以在各种Web开发场景中找到。

回答

1

转义字符之前首先将它们添加到文档中。不要让浏览器从无效HTML生成DOM,然后从生成的DOM中生成HTML,然后尝试修复HTML并将其恢复。

+0

谢谢!我发现越来越多,这是要走的路。我在Wordpress.stackexchange.com网站上提出了另一个问题,要求如何轻松替换发布内容中的某些元素的内容。 http://wordpress.stackexchange.com/q/34401/9710 – bigp