2013-06-27 37 views
2

我試圖做到這一點,jQuery會自動解碼data- *屬性嗎?

var worker_ids = $.parseJSON($(':selected',this).data('workers')); 

但我一直取回null。所以我嘗試只是日誌記錄

$(':selected',this).data('workers') 

它讓我的工作人員成爲一個數組!

我的HTML看起來像:

<option value="77" data-workers="[&quot;2287&quot;,&quot;2137&quot;]">COOL KIDS</option> 

我本來期望它回來作爲我將不得不解析字符串。

這種情況對我來說工作得非常好,但它似乎不是一個很好的設計決策。如果我的屬性恰好看起來像JSON會怎麼樣?

+1

[讓見(http://api.jquery.com/data/#data2):*「當data屬性是一個對象(以'{')或數組開始(以'['開頭),然後'jQuery.parseJSON'用於解析字符串;它必須遵循有效的JSON語法,包括帶引號的屬性名稱。 t可解析爲JavaScript值,它保留爲一個字符串。要檢索值的屬性作爲字符串而不嘗試轉換它,請使用'attr()'方法。「* –

+1

@Fe lixKling:謝謝。我只是通過該頁面瀏覽,應該更仔細地準備好它:-) – mpen

+0

是的:D ......... –

回答

6

是的,jQuery確實嘗試猜測存儲在數據屬性中的數據類型,並在使用.data(也適用於數字,對象等)時將其轉換。

要獲取原始的屬性值,使用.attr('data-workers')

的實際操作是由the internal dataAttr function

1

執行對於已經由原始的HTTP響應創建的數據屬性,jQuery不會試圖猜測,預期變量類型。例如,如果原始HTTP響應服務器的屬性爲data-foo="true",那麼jQuery將解釋爲JavaScript boolean true

但是,如果您使用jQuery將數據屬性設置爲字符串,jQuery將記住您存儲了一個字符串,並且不會再嘗試猜測。

下面是一個代碼片段,證明了我的意思:

console.log(typeof $("main").data("foo")); 
 

 
$("main").data("foo", "true"); 
 
console.log(typeof $("main").data("foo"));
<script src="https://code.jquery.com/jquery-3.2.1.min.js" integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4=" crossorigin="anonymous"></script> 
 

 
<main data-foo="false">main</main>