2011-08-19 8 views
70

सभी विरासत आदि शैलियों की शैली वस्तु बनाने के लिए this script का उपयोग करना।मैं जावास्क्रिप्ट ऑब्जेक्ट प्रॉपर्टी को हाइफ़न के साथ कैसे संदर्भित करूं?

var style = css($(this)); 
alert (style.width); 
alert (style.text-align); 

निम्नलिखित के साथ, पहले चेतावनी ठीक काम करेंगे, लेकिन दूसरा एक नहीं है .. यह एक शून्य से मुझे लगता है .. डिबगर कहते हैं, 'ध्यान में न आया संदर्भ त्रुटि' के रूप में - की व्याख्या है। मैं इसके चारों ओर उद्धरण नहीं डाल सकता, हालांकि, क्योंकि यह एक स्ट्रिंग नहीं है। तो मैं इस ऑब्जेक्ट प्रॉपर्टी का उपयोग कैसे करूं?

उत्तर

89

संपादित

देखो आप सीएसएस गुण कुंजी संकेतन गुण की संख्या के साथ संगत नहीं है के लिए है कि देखेंगे। ऊंट मामले कुंजी अंकन इसलिए का उपयोग करते हुए वर्तमान रास्ता

obj.style-attr // would become 

obj["styleAttr"] 

उपयोग कुंजी के बजाय अंकन डॉट

style["text-align"] 

सभी सरणियों में js वस्तुओं रहे हैं और सभी वस्तुओं को सिर्फ साहचर्य सरणियों, इस साधन हैं है आप ऑब्जेक्ट में किसी स्थान को संदर्भित कर सकते हैं जैसे आप किसी सरणी में एक कुंजी का संदर्भ लेंगे।

arr[0] 

या वस्तु जब गुण इस तरह

  1. वे ऐसा मूल्यांकन किया जाता है तार जब तक आप एक काउंटर के साथ कुछ कर रहे हैं या का उपयोग कर का उपयोग तक पहुँचने

    obj["method"] == obj.method 
    

    नीचे दिए कुछ याद करने के लिए गतिशील विधि नाम।

    इसका मतलब यह है obj [विधि] जबकि obj [ "विधि"] नहीं

  2. यदि आप अक्षर हैं जो js चर में अनुमति नहीं है का उपयोग कर रहे इस अंकन का उपयोग करना चाहिए होता है कि आप एक अपरिभाषित त्रुटि देना होगा।

इस regex काफी रकम इसे

[a-zA-Z_$][0-9a-zA-Z_$]* 
+0

कुंजी नोटेशन यहां लागू नहीं होता है - सीएसएस कुंजी में ऊंट मामले का उपयोग करके शैलियों को परिभाषित करता है: http://jsfiddle.net/49vkD/ – Brian

+1

@brian मेरे लिए सभी 4 बार काम करता है – austinbv

+0

क्या ब्राउज़र? हाइफ़न पर मेरे लिए विफल आईई 7, आईई 8, एफएफएक्स 3.5 में मिलता है। और, असफल होने का मतलब है कि उन दोनों के लिए "अपरिभाषित" प्रदर्शित करता है ... – Brian

5

उपयोग कोष्ठक: वस्तुओं पर

var notTheFlippingStyleObject = { 
    'a-b': 1 
}; 

console.log(notTheFlippingStyleObject["a-b"] === 1); // true 

और जानकारी: MDN

नोट: यदि आप एक्सेस कर रहे हैं style वस्तु, CSSStyleDeclaration, उपयोग जावास्क्रिप्ट से उस तक पहुंच CamelCase चाहिए। टिप्पणियों पर अधिक जानकारी here

+0

http://jsfiddle.net/49vkD/ - सीएसएस शैली वस्तुओं के लिए कोई हाइफ़न नहीं - ऊंट के मामले का उपयोग करें। – Brian

+1

आप मुझे प्रसन्न नहीं कर रहे हैं - आप इस सवाल के लिए कई अन्य उत्तरदाताओं के प्रति डब्ल्यू 3 सी मानक को खुश कर रहे हैं: http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSS2Properties , लेकिन केवल वही ... – Brian

+0

** इस कोड का उपयोग न करें। ** यह नहीं है कि ऊंट केज्ड सीएसएस गुण अधिक क्रॉस-ब्राउज़र हैं, यह है कि ऊंट के मामले में हाइफ़न का उपयोग मानक नहीं है और काम नहीं करना चाहिए। – Oriol

2

सीधे सवाल का जवाब करने के लिए: style['text-align'] आप इसे कैसे में हाइफ़न से एक संपत्ति संदर्भ होता है। लेकिन style.textAlign (या style['textAlign']) इस मामले में क्या उपयोग किया जाना चाहिए।

+0

http://jsfiddle.net/49vkD/ - कोई हाइफ़न - camelCase। – Brian

+0

** इसका उपयोग न करें। ** सीएसएस गुण ऊंट-आधारित हैं। आपका कोड कुछ ब्राउज़रों पर काम कर सकता है लेकिन मानक नहीं है। – Oriol

+0

ऊंट के मामले का उपयोग करने के लिए समायोजित –

15

- के साथ सीएसएस गुण जावास्क्रिप्ट ऑब्जेक्ट्स में ऊंटकेस में दर्शाए जाते हैं।यही कारण है कि होगा:

alert(style.textAlign); 

तुम भी स्ट्रिंग का उपयोग करने के लिए एक ब्रैकेट अंकन इस्तेमाल कर सकते हैं:

alert(style['text-align']); 

संपत्ति के नाम केवल अक्षर, संख्या, अच्छी तरह से ज्ञात $ संकेत और _ (करने के लिए धन्यवाद हो सकती है pimvdb)।

+1

'_ 'भी अनुमति है। – pimvdb

+0

उत्तरार्द्ध काम करता है .. उन वाक्य रचनाओं में से एक जो मैंने अभी याद किया था। जिस संदर्भ में मैंने संदर्भित किया है वह नियमित सीएसएस शैली के नामों का उपयोग करता है, लेकिन अभी भी इसके बारे में जानना उपयोगी है! – Damon

+0

संपत्ति नाम संख्याओं से शुरू नहीं हो सकते हैं हालांकि – austinbv

2

ऑब्जेक्ट प्रॉपर्टी नाम सीएसएस नामों के लिए एक-एक-एक मैच नहीं हैं।

12

मूल सवाल का जवाब है: उद्धरण में जगह संपत्ति नाम और सरणी शैली अनुक्रमण का उपयोग करें:

obj['property-with-hyphens']; 

कई ने बताया है कि संपत्ति आप में रुचि रखते हैं एक सीएसएस संपत्ति है। सीपीयू गुण जो हाइफ़न हैं स्वचालित रूप से ऊंट आवरण में परिवर्तित हो जाते हैं।

style.textAlign; 

हालांकि इस समाधान केवल सीएसएस संपत्तियों के लिए काम करता है: उस मामले में आप की तरह ऊंट मामलों नाम का उपयोग कर सकते हैं। उदाहरण के लिए,

obj['a-b'] = 2; 
alert(obj.aB);   // undefined 
alert(obj['a-b']);  // 2 
+0

ऊंट के मामले का उपयोग करने के लिए ठीक करें: http://jsfiddle.net/49vkD/ – Brian

+0

@Brian आप सीएसएस गुणों के लिए सही हैं। हालांकि, मैं मूल सामान्य प्रश्न का उत्तर दे रहा था "मैं जावास्क्रिप्ट ऑब्जेक्ट प्रॉपर्टी को हाइफ़न के साथ कैसे संदर्भित करूं?" यहां आपके जेएसफ़िल्ड का एक अपडेटेड संस्करण है: http://jsfiddle.net/49vkD/1/ – Stoney

+0

वास्तव में मैंने यहां अपने उत्तरों के दायरे को संकुचित कर दिया - मैंने माना कि ओपी विशेष रूप से स्टाइल ऑब्जेक्ट्स था। मेरे डाउन-वोट को हटा दिया गया क्योंकि सवाल उससे थोड़ा अधिक खुला था। – Brian

3

आपकी समस्या को हल करने के लिए: उन में हाइफ़न के साथ सीएसएस गुण represented by JavaScript properties in camelCase हैं इस समस्या से बचने के लिए। आप चाहते हैं: style.textAlign। उपयोग square bracket notation:

सवाल उत्तर देने के लिए के रूप में obj["prop"] ताकि आप तार का उपयोग कर संपत्ति के नाम का उपयोग और अक्षर हैं जो पहचानकर्ता में इनकार किया जाता का उपयोग कर सकते obj.prop में ही है।

3
alert(style.textAlign) 

या

alert(style["textAlign"]); 
+0

+1, ऊंटकेस को इंगित करने के लिए धन्यवाद – Joe

2

मैं सीएसएस शैलियों वे जावास्क्रिप्ट में CamelCase को बदल जाओ तो test-aligntextAlign हो जाता है के मामले में लगता है। सामान्य स्थिति में जहां आप ऐसी संपत्ति तक पहुंचना चाहते हैं जिसमें गैर-मानक वर्ण हैं, आप सरणी शैली का उपयोग करते हैं। ['text-align']

-1

सबसे पहले, मुझे आश्चर्य है कि क्यों समाधान मेरी अंत

api['data-sitekey'] //returns undefined 

पर काम नहीं किया ... बाद में पता लगाने कि डेटा तक पहुँचने का श्रेय पर अलग है: यह इस तरह होना चाहिए:

var api = document.getElementById("some-api"); 
api.dataset.sitekey 

आशा है कि इससे मदद मिलती है!

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

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