सरणी को jQuery में कैसे पास करें। data () विशेषता


86

ठीक है तो मैं एक बहुत ही बुनियादी सरणी एक jquery डेटा attrubute सर्वर पक्ष में पारित करना चाहते हैं जैसे:

<div data-stuff="['a','b','c']"></div>

और फिर ऐसा होना

var stuff = $('div').data('stuff');

alert(stuff[0]);

ऐसा क्यों दिखाई देता है '[' और 'नहीं' ए '(जेएसफल्ड लिंक देखें)

JSFiddle लिंक: http://jsfiddle.net/ktw4v/3/

जवाबों:


144

यह आपके चर को एक स्ट्रिंग के रूप में मान रहा है, जिसमें से शून्य तत्व है [

ऐसा इसलिए हो रहा है क्योंकि आपका स्ट्रिंग JSON मान्य नहीं है , जिसे सिंगल कोट्स के बजाय एक स्ट्रिंग सीमांकक के रूप में डबल-कोट्स का उपयोग करना चाहिए। फिर आपको संपूर्ण विशेषता मान को हटाने के लिए एकल-उद्धरण का उपयोग करना होगा।

यदि आप अपने उद्धरण को ठीक करते हैं तो आपके मूल कोड कार्य ( http://jsfiddle.net/ktw4v/12/ देखें )

<div data-stuff='["a","b","c"]'> </div>

var stuff = $('div').data('stuff');

जब jQuery एक डेटा विशेषता में वैध JSON देखता है तो यह स्वचालित रूप से आपके लिए इसे अनपैक कर देगा


5
infact, [
act

2
[[a ’, 'b’,' c ’] JSON
Mutt

JSON कैसा दिखना चाहिए?
विल्सनपेज

5
इसे दोहरे उद्धरण चिह्नों का उपयोग करना चाहिए, लेकिन फिर आपको HTML विशेषता को संलग्न करने के लिए एकल उद्धरणों का उपयोग करना होगा।
अलनीतक

1
@JoeBrockhaus वे दोनों सीमांकक हैं - उद्धरण चिह्न "स्ट्रिंग सीमांकक" हैं और अल्पविराम "रिकॉर्ड सीमांकक" हैं। केवल पूर्व ओपी के प्रश्न के लिए प्रासंगिक हैं।
अलंकृत

15

इसे एक विशेषता के रूप में घोषित करने का मतलब है कि यह एक स्ट्रिंग है।

तो stuff[0]इसके बराबर होगा:var myString = "['a','b','c']"; alert(myString[0]);

आपको इसे इस तरह बनाना होगा:

<div data-stuff="a,b,c"></div>

var stuff = $('div').data('stuff').split(',');
alert(stuff[0]);

पीछे हटना: jQuery का पार्सिंग विफल हो जाता है क्योंकि यह पार्ससन के नियमों को पूरा नहीं करता है।

हालांकि, मैं अपने समाधान के पीछे खड़ा रहूंगा। दूसरों के ऐसे पहलू हैं जो आदर्श से कम हैं, जैसे कि यह समाधान कुछ मायनों में आदर्श से कम है। सभी इस बात पर निर्भर करते हैं कि आपके प्रतिमान क्या हैं।


4
नहीं, इसे अमान्य JSON घोषित करने का मतलब है कि इसे एक स्ट्रिंग के रूप में माना जाता है।
अलनीतक

@Alnitak - हालांकि यह बहुत अच्छी तरह से हो सकता है कि jQuery इसका इलाज करता है - मुझे नहीं लगता कि jQuery Api संदर्भ में है, और यह सबसे निश्चित रूप से w3c कल्पना में स्पष्ट नहीं है। JSON को एक डोम ऑब्जेक्ट में परिभाषित करने से w3c की 'न्यूट्रलिटी' टूट जाएगी, यह एक jQuery एक्सटेंशन प्रतीत होता है या, प्रलेखन की कमी को देखते हुए - quirk। किसी भी दर पर, हालांकि मैं यह नहीं कह सकता कि मैं इस बिंदु पर आपके साथ सहमत हूं - मैं इतना हैरान नहीं हूं कि मैं इसे हटाने जा रहा हूं कि पहले +1 मिला। :)
जॉन ग्रीन

@ जॉन यह है jQuery एपीआई में प्रलेखित - "हर प्रयास एक JavaScript मान (इस बूलियन्स, संख्या, ऑब्जेक्ट, अरै, और अशक्त भी शामिल है) अन्यथा यह एक स्ट्रिंग के रूप छोड़ दिया है करने के लिए स्ट्रिंग परिवर्तित करने के लिए किया जाता है।"
अलनीतक

@Alnitak तब मैं ऊँचा हूँ, क्योंकि मैंने पोस्ट करने से पहले पूरे डेटा सेक्शन और बहुत सारी टिप्पणियों को पढ़ा। मैंने बस फिर से देखा।
जॉन ग्रीन

@Alnitak ठीक है, मुझे यह आपके संपादन से मिला। हां, यह एक जेकरी एक्सटेंशन है। मैं अपनी पोस्ट को वापस कर दूंगा।
जॉन ग्रीन

-2

जैसा कि अन्य लोगों ने पहचान लिया है कि मूल्य को स्ट्रिंग के रूप में माना जाता है इसलिए यह "[" है। कृपया इसे आज़माएं (आआ दिवा का नाम है और मैंने डेटा-सामान निकाला):

$(function(){
    $.data($("#aaa")[0],"stuff",{"aa":['a','b','c']});
    var stuff = $.data($("#aaa")[0],"stuff").aa;
    alert(stuff[0]); //returns "a"
});

-4

एक अलग दृष्टिकोण jsfiddle पर पोस्ट किया गया है ; var stuff = $('div').data('stuff');सामान '' '' के रूप में 0 वें वर्ण के साथ एक स्ट्रिंग है

खैर, var stuff = eval($('div').data('stuff'));आपको एक सरणी मिलनी चाहिए


3
ईविल बुराई है :) वहाँ हमेशा एक बेहतर तरीका है
BYTE RIDER

कृपया अपने उत्तर को यह कहने के लिए समायोजित करें कि, हालांकि एक संभावित समाधान, eval () के कारण इकसिंगों की मृत्यु हो सकती है ... stackoverflow.com/questions/86513/…
सिर्फ सादा उच्च
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.