innerHTML和静默解码的引号

时间:2015-07-26 21:23:17

标签: javascript json innerhtml

设置:

在页面上,在隐藏的div中,是一个格式良好的JSON对象。

作为此对象的一部分,某些值是HTML,在此HTML中,双引号是HTML编码的,如下所示:"addtionalInfo": "If you need more help, please visit <a href="http://www.google.com">Google</a>"

稍后在页面上,我正在尝试编写将读取此对象的JS,以便可以完成其他很酷的事情。

问题: innerHTML似乎是隐式解码引号,这意味着JSON.parse()(以及类似的jQuery选项)失败,因为语法很糟糕。我不能替换()引号,因为它们以适当的JSON方式遍布整个地方。

示例:

<span class="hiddenField" id="TheJSONObject">


 { "thing" : "thingvalue", "badthing" : "a &lt;a href=&quot;http://www.google.com&quot;&gt;link!&lt;/a&gt;", "lastthing" : "lastthingvalue" }


</span>

<script>
var newobj = JSON.parse(document.getElementById("TheJSONObject").innerHTML.trim());
alert(newobj.thing);

来自控制台的证明(CHROME):

console.log(document.getElementById("TheJSONObject").innerHTML) 


 { "thing" : "thingvalue", "badthing" : "a &lt;a href="http://www.google.com"&gt;link!&lt;/a&gt;", "lastthing" : "lastthingvalue" }

问题: 有没有办法获得实际的原始innerHTML而没有JS试图给我这样的善意,以便JSON.parse()可以工作?

1 个答案:

答案 0 :(得分:2)

这完全不可能。您有一个<span>,而不是<script>或其他被视为文字文字的内容,因此&quot;"之间没有区别。你需要正确编码才能开始;这可能意味着对包含HTML编码值的JSON编码对象进行HTML编码,以输出为HTML。

如果您无法修改该输出,那么您可以获得的最接近的可能是发出(XHR)请求并在实体完整的情况下手动解析它。