2016-07-03 22 views
0

jsonを使用してdata-属性にjsonを追加して保存します。 問題:jsonとエスケープした二重引用符を含む属性を追加すると、エスケープされた二重引用符ではなく、正確に"が追加されます。JSON値で属性を追加する

出力:期待

<div data-myjson="{&quot;number&quot;:&quot;1&quot;}"></div> 

:ブラウザはプレーンな文字として二重引用符として&quot;を治療してはならない

<div data-myjson="{"number":"1"}"></div> // with escaped inner quotes 

私のjqueryの

$("div").attr("data-myjson", "{&quot;number&quot;:&quot;1&quot;}"); 

実際には二重引用符をエスケープ追加する方法HTML自体の中で?

+2

'attr()'はエスケープされたHTMLではなく生の値をとります。 – SLaks

+0

私はブラウザが"をとり、それらを変換すると仮定しています。私はjQueryがそれをしないことを知っています。 – guub

+0

文字列に最初に"が含まれているのはなぜですか?私はそれが下の彼の答えで定義されたfedegheとしてJavascriptオブジェクトであると仮定します。 –

答えて

0

&quot;を含むテキストは、上述したように、プレーンな文字列がどのように使用して、それをデコードについて場合、私は、誤解だ場合を除き:

var str = '{&quot;number&quot;:&quot;1&quot;}'; 
$("div").attr("data-myjson", $('<div/>').html(str).text()); 
+0

しかし、二重引用符はこのメソッドで正しくエスケープされますか? – guub

+0

私はそう信じています。それを試してください:https://jsfiddle.net/ofadazjn/。これは期待された結果ですか? –

0

JSON.stringify(とJSON.parseを抽出する)はどうしますか?

var o = {"number":"1"}; 
$("div").attr("data-myjson", JSON.stringify(o)); 
0

対照的なattrは、(文字列の値をとるので、 "HTML")に、単純に単一引用符(')を使用し、実際 [JSON]の値を渡し:

$("div").attr("data-myjson", '{"number":"1"}'); 

&quote;を含むHTMLエンティティは、<script>タグのコンテンツなど、CDATAセクションで処理されません。

用語nit:attrは、DOMを最初に解析したHTMLソース/テキストではなく、ドキュメントを表すツリーグラフである[HTML] DOMを更新します。 htmlのようないくつかの関数だけがデータをHTMLとして扱います。

+0

私はこの解決策を知っていますが、私は二重引用符をエスケープする必要があると考えていました – guub

関連する問題