2010-11-26 18 views
32

का उपयोग करके एक सरणी स्टोर करें और उपयोग करें मैं HTML डेटा टैग में एक सरणी को स्टोर करने का प्रयास कर रहा हूं। उदाहरण के लिए:एचटीएमएल डेटा टैग और jQuery

<div data-locs="{'name':'London','url':'/lon/'},{'name':'Leeds','url':'/lds'}"> 

मैं jQuery का उपयोग कर उस डेटा तक पहुंच रहा हूं। मुझे एहसास है कि यह एक स्ट्रिंग के रूप में संग्रहीत है, और मैंने इसे एक सरणी में बदलने के लिए विभिन्न विधियों का प्रयास किया है, लेकिन मैंने एक दीवार मारा है। यदि आप इस जेएसफ़ील्ड पेज पर एक नज़र डालेंगे तो आप जो कुछ करने की कोशिश कर रहे हैं उसका पूरा उदाहरण देखेंगे।

http://jsfiddle.net/B4vFQ/

कोई भी विचार?

धन्यवाद!

उत्तर

67

आप इस तरह, मान्य JSON ([ और सरणी के लिए ], एकल के बजाय डबल कोट्स) का उपयोग करते हैं:

<div id="locations" data-locations='[{"name":"Bath","url":"/location/bath","img":"/thumb.jpg"},{"name":"Berkhamsted","url":"/location/berkhamsted","img":"/thumb.jpg"}]'> 

तो फिर तुम क्या है (.data() का प्रयोग करके) सरणी प्राप्त करने के लिए काम करेंगे:

$('#locations').data('locations'); 

You can test it here

+2

+1 मुझे एहसास नहीं हुआ कि jQuery आपके लिए जेएसओएन को स्वचालित रूप से पार्स करेगा। क्या आपको हाथ से पता चल जाता है कि यह कैसे पता लगाता है? या यह सिर्फ 'कोशिश/पकड़' करता है। संपादित करें: कभी नहीं, ऐसा लगता है कि यह 'कोशिश/पकड़' है। – user113716

+0

@patrick - jQuery ..3.3+ के साथ '.data()' यहां काम करता है, यह प्रकार का पता लगाता है ... संख्याओं को भी परिवर्तित करता है, साथ ही –

+1

@cambraca - यदि ब्राउज़र इसे हां का समर्थन करता है, लेकिन कुछ करना है 'JSON.parse() 'पर कॉल करें (और jQuery यह करता है अगर यह वहां JSON है), आप इसे यहां देख सकते हैं: https://github.com/jquery/jquery/blob/master/src/data.js#L203 -218 –

-2

इस प्रयास करें: jsfiddle में इसे

var testOne = eval("new Array(" + $('#locations').data('locations') + ")"); 

देखो।

+2

यह डेटा निकालने का एक अच्छा या सुरक्षित तरीका नहीं है, जब भी संभव हो 'eval()' से बचें। यहां वास्तविक JSON का उपयोग करना अधिक सही और तेज़ दोनों है, सही मार्कअप का उपयोग क्यों नहीं करें? :) –

+0

@ निक: हाँ, मैं विशेषता में जोड़ने के लिए सहमत हूं [] एक बेहतर विकल्प – cambraca

+0

है जो वास्तव में समस्या को हल नहीं करेगा, उद्धरण भी गलत हैं, लेकिन समस्या को ठीक करने के लिए निश्चित रूप से बेहतर दृष्टिकोण, लक्षण –

4

शुरुआत और अंत करने के लिए [ और ] जोड़ने का प्रयास करें (यह वैध JSON बनाता है)। ऐसा करने के बाद, आप इसे JSON.parse() का उपयोग मूल जावास्क्रिप्ट ऑब्जेक्ट में बदलने के लिए कर सकते हैं।

+0

jQuery यह पहले से ही करता है यदि यह वैध JSON (डबल कोट्स) है ... बस '[]' जोड़ना उड़ाएगा, क्योंकि देशी 'JSON.parse' को काम करने के लिए वैध JSON की आवश्यकता है, और सिंगल कोट्स यह नहीं हैं :) –

+0

@ निक क्रेवर : आप सही हे! मुझे नहीं पता था कि jQuery स्वचालित रूप से ऐसा करता है। बहुत बढ़िया – jwueller

संबंधित मुद्दे