2010-12-22 16 views
7

में डेटा स्टोर करने का सही तरीका क्या है हाल ही में मैंने डीओएम में जेएसओएन प्रारूप में डेटा स्टोर करने के लिए विभिन्न HTML तत्वों में शीर्षक टैग का उपयोग किया है।डीओएम

क्या यह एक बुरा दृष्टिकोण है (मुझे लगता है कि यह है)? यह पूरा करने का सही तरीका क्या है जो jQuery के साथ अच्छी तरह से काम करता है? "अच्छी तरह से काम करता है" मेरा मतलब है

$("myButton").click(function (e) { 
    var myData; 
    eval("myData=" + $(this).attr("title")); 
}); 

बहुत अच्छी तरह से काम करता है लेकिन फिर मुझे लगता है कि ऐसा करने का एक बेहतर तरीका है?

पीएस: बीटीडब्ल्यू एचटीएमएल तत्वों का शीर्षक टैग वास्तव में कैसे काम करता है? मुझे लगता है कि यह वास्तव में उपयोग होने पर समाप्त होता है?

पीएसएस: क्या मुझे एक jQuery आधारित और गैर jQuery प्रतिक्रिया भी मिल सकती है? (क्षमा करें उधम मचाते हो)

उत्तर

9
eval("myData=" + $(this).attr("title")); 

यह आपको तमाचा लगभग एक कानूनी कारण नहीं है पर दिखाई दे सकता है! (जे/के)

आपको "वैश्विक रूप से" डेटा स्टोर करने के लिए अपना नामस्थान ऑब्जेक्ट का उपयोग करना चाहिए। उस संदर्भ में, वैश्विक स्तर पर केवल आपके आवेदन कोड में वैश्विक है और global object (window ब्राउज़र में) का उपयोग नहीं कर रहा है।

var my_application = {}; 

$('myButton').click(function() { 
    my_application.myData = $(this).attr('title'); 
}); 

यह पाठ्यक्रम की एक बहुत ही बुनियादी रणनीति है। अपने विशेष मामले में, आप डीओएम नोड को डेटा संलग्न करने के लिए jQuery की .data() विधि का भी उपयोग कर सकते हैं।

$('myButton').click(function() { 
    $.data(this, 'myData', this.title); 
}); 

रेफरी .: .data(), jQuery.data()

+0

लॉल .... पकड़ो ... क्या myData नहीं है क्योंकि यह अज्ञात फ़ंक्शन को अज्ञात फ़ंक्शन में घोषित किया गया है जिसमें यह रहता है? –

+0

@MaximGershkovich: हाँ, लेकिन आप तब भी 'eval() 'का उपयोग क्यों करेंगे? आप स्थानीय चर के लिए एक मान असाइन कर सकते हैं। – jAndy

+0

क्षमा करें शायद मुझे और अधिक स्पष्ट होना चाहिए (यह) .attr ('title') = {someID: "", कुछ प्रॉपर्टी: "", एक और प्रॉपर्टी: ""}। क्या मैं कुछ भूल रहा हूँ? –

4

उपयोग jQuery data()

jQuery.data() विधि की अनुमति देता है एक तरीका है कि वृत्तीय संदर्भ और से सुरक्षित है में तत्वों डोम के लिए किसी भी प्रकार की डेटा संलग्न करने के लिए इसलिए मेमोरी लीक से मुफ्त। jQuery सुनिश्चित करता है कि डेटा हटा दिया जाता है जब DOM तत्व jQuery विधियों के माध्यम से हटा दिए जाते हैं, और जब उपयोगकर्ता पृष्ठ छोड़ देता है। हम एक एक तत्व के लिए कई अलग मूल्यों को निर्धारित करने और उन्हें बाद में प्राप्त कर सकते हैं:

jQuery.data(document.body, 'foo', 52); 
0

jQuery दुनिया यह आम तौर पर मेटाडाटा प्लगइन का उपयोग करने के लिए एक सबसे अच्छा अभ्यास होना कहा जाता है के रूप में यह एक आधिकारिक है jQuery प्लगइन और एचटीएमएल 5 डेटा विशेषताओं का भी समर्थन करता है। अधिक जानकारी के लिए आप इस http://docs.jquery.com/Plugins/Metadata/metadata

8

अपने उदाहरण में, मैं निम्नलिखित सुझाव देते हैं चाहते हैं जो 'eval' की सुरक्षा जोखिमों के लिए आप का खुलासा नहीं करता:

myData = JSON.decode($(this).attr("title")); 

में सामान्य यह गैर-सुरक्षित डेटा रखने के लिए एक वैध दृष्टिकोण है।)

  • उपयोग JQuery के .data (विधि::

    MyData = $ इस तुम भी अन्य विकल्पों की एक संख्या है।डेटा ("foo");

  • एचटीएमएल 5 में अब आप किसी भी तत्व पर एक विशेषता के रूप में कस्टम डेटा विशेषताओं (जैसे "") का उपयोग कर सकते हैं। http://html5doctor.com/html5-custom-data-attributes/

  • यदि आप जानते हैं कि यह उपलब्ध है तो आप स्थानीय संग्रहण का उपयोग कर सकते हैं। http://dev.w3.org/html5/webstorage/

  • आप जेक्विरी के शीर्ष पर बैकबोन.जेएस का उपयोग कर सकते हैं ताकि आप मॉडलों के रूप में अपने डेटा को संभालने का एक और अधिक सार तत्व प्रदान कर सकें। http://documentcloud.github.com/backbone/

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