我试图访问数据属性中的字符串化JSON数组。但是,当我使用$(...).data('whatever')
或$(...).attr('data-whatever')
获取值时,JSON内容中的HTML实体(例如"
)会转换为其字符表示形式(例如"
)这会导致JSON字符串在解析时被误解。
例如,如果我的数据属性的值为["Oberlin City Club: Opera Preview","Documentary Screening "Still Dreaming: Frances Walker at 93""]
,则使用$(...).data()
读取此值将返回["Oberlin City Club: Opera Preview","Documentary Screening "Still Dreaming: Frances Walker at 93""]
。为什么JavaScript会将"
转换为"
?如何在不将"
转换为"
的情况下阅读数据属性?
console.log($('div').attr('data-titles'));
console.log(JSON.parse($('div').attr('data-titles')));

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div data-titles='["Oberlin City Club: Opera Preview","Documentary Screening "Still Dreaming: Frances Walker at 93""]'></div>
&#13;
答案 0 :(得分:2)
为什么JavaScript会将
"
转换为&#34;?
在这种情况下,它没有。通过在您的响应中使用"
,浏览器会将其解析为"
,并将其放入属性中。这是因为你使用了一个html实体。
HTML实体是一段文本(&#34;字符串&#34;),以&符号(&amp;)开头,以分号(;)Entity MDN
结尾
因此,JavaScript无法解决这种情况。您需要找出一种在模板引擎中以不同方式呈现"
的方法,最好使用&quot;
对引号进行双重编码(如@Barmar in comments所述)。