2016-06-16 9 views
1

Beim Abrufen von Datenattributen mit .data() von jQuery, und dieses Datenattribut enthält die HTML-Entitäten für doppelte Anführungszeichen, kann es nicht in ein JSON-Objekt konvertiert werden. Wie Sie unten sehen, ist es einfach, da keine gültige JSON gesehen und daher behandelt wie es einen String:Abrufen von Datenattributen mit jQuery "

var dataAsString = $("[data-someprop]").data("someprop"); 
 
var dataAsString2 = $("[data-someprop2]").data("someprop2"); 
 

 
var dataAsJSON = $("[data-anotherprop]").data("anotherprop"); 
 

 
$(".target1").append(typeof(dataAsString)); 
 
$(".target2").append(typeof(dataAsString2)); 
 
$(".target3").append(typeof(dataAsJSON));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<div data-someprop='{ 
 
        "key": "some &quot;value&quot; in quotes" 
 
        }'></div> 
 

 
<div data-someprop2='{ "key": "some &quot;value&quot; in quotes" }'></div> 
 

 
<div data-anotherprop='{ 
 
        "key": "some value without quotes" 
 
        }'></div> 
 

 

 

 
<div class="target1"></div> 
 
<div class="target2"></div> 
 
<div class="target3"></div>

Wie kann ich doppelte Anführungszeichen durch JSON-Objekte in Daten-Attribute übergeben?

bearbeiten: Ein drittes Beispiel hinzugefügt, um zu zeigen, dass es nicht die Zeilenumbrüche sind.

+0

'Haben JSON.parse' scheitern? – Rayon

+0

Das JSON-Parsing wird von jQuery ausgelöst/ausgeführt, wenn es als analysierbare JSON erkannt wird. Dies scheint nicht der Fall zu sein, da JSON.parse (jQuery ('[data-someprop') .attr ('data-someprop')) ebenfalls fehlschlägt. – MattDiMu

Antwort

0

Das Problem wird durch die Zeilenumbrüche in der HTML-codierten JSON-Zeichenfolge-Version verursacht. Die unten funktioniert:

var dataAsString = $("[data-someprop]").data("someprop"); 
 
var dataAsString2 = $("[data-someprop2]").data("someprop2"); 
 
var dataAsString3 = $("[data-someprop3]").data("someprop3"); 
 
var dataAsString4 = $("[data-someprop4]").data("someprop4"); 
 

 
$(".target1").append(typeof(dataAsString) + ' - ' + dataAsString.key); 
 
$(".target2").append(typeof(dataAsString2) + ' - ' + dataAsString2.key); 
 
$(".target3").append(typeof(dataAsString3) + ' - ' + dataAsString3.key); 
 
$(".target4").append(typeof(dataAsString4) + ' - ' + dataAsString4.key);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<div data-someprop='{&quot;key&quot;: &quot;some value without quotes&quot;}'></div> 
 
<div data-someprop2='{ "key": "some &quot;value&quot; in quotes" }'></div> 
 
<div data-someprop3='{ "key": "some &nbsp;value&nbsp; in quotes" }'></div> 
 
<div data-someprop4='{ 
 
    "key": "some &nbsp;value&nbsp; in quotes" 
 
}'></div> 
 

 

 
<div class="target1"></div> 
 
<div class="target2"></div> 
 
<div class="target3"></div> 
 
<div class="target4"></div>

+0

Sorry, aber das ist nicht das Problem. Wenn nur die Zeile entfernt wird, funktioniert es immer noch nicht. Ihr Beispiel (wo Sie "ersetzt" haben mit ") zeigt nur, dass " wie behandelt wird ", obwohl sie nicht sind. – MattDiMu

+0

Ein drittes Beispiel hinzugefügt, das zeigt, dass es nicht die Zeilenumbrüche sind, nur um es zu verdeutlichen. – MattDiMu

+0

Ich aktualisierte die Beispiele in meiner Antwort. Das Problem scheint nur mit der HTML-Entität """ und ihrer Position in der Zeichenfolge zu tun zu haben, was mich zu der Annahme verleitet, dass jQuery den Wert deserialisiert, bevor er im Objekt im Cache gespeichert wird. ' ' funktioniert gut in jeder Position –

Verwandte Themen