2012-04-21 7 views
20
document.getElementById('myId').style; 

का उपयोग कर विशेषता मान तक पहुँचने के विभिन्न तरीके शैली विशेषता तक पहुँचने का एक ही रास्ता है .. इसके अलावा हम एक ही document.getElementById('myId').getAttribute('style');जावास्क्रिप्ट

का उपयोग कर क्या विशेषता मान प्राप्त करने की इन दो तरीकों के बीच अंतर है क्या कर सकते हैं ..और कौन सा बेहतर है?

+1

मुझे लगता है कि आप भी 'document.getElementById ('MyID') [ 'शैली']' कर सकता है। afaik, इसके पास 'getAttribute()' का उपयोग करने के समान कारण है @gwynhowell समझाया गया है। – Joseph

+0

यह ऑब्जेक्ट गुणों तक पहुंचने का एक और तरीका है .. सही? –

+0

yup, बस एक और तरीका। – Joseph

उत्तर

15

पहले उदाहरण में आप style विशेषता तक नहीं पहुंच रहे हैं, लेकिन style संपत्ति पर। style संपत्ति के मामले में संपत्ति का मूल्य कुछ भी हो सकता है। दूसरे उदाहरण में आप टैग की शैली विशेषता तक पहुंच रहे हैं। विशेषता का मान केवल स्ट्रिंग हो सकता है।

कुछ विशेषताओं के मामले में उनके बीच मैपिंग है। इसलिए यदि आप एक HTML नोड पर style विशेषताएँ सेट करते हैं, तो आपकी style संपत्ति अपडेट की जाती है और आपकी शैली लागू होती है। हालांकि, यह हमेशा सत्य नहीं होता है: IE के कुछ संस्करणों (कम से कम आईई 7 तक) में एक प्रसिद्ध बग यह है कि मैपिंग का प्रकार टूटा हुआ है, इसलिए एक विशेषता सेट करें संपत्ति पर प्रतिबिंबित नहीं होती है।

तो, यदि आप एक HTML नोड पर एक विशेषता सेट करना चाहते हैं, तो आपको दूसरे का उपयोग करना होगा। लेकिन अगर आप अपनी ऑब्जेक्ट की संपत्ति तक पहुंचना चाहते हैं कि एक HTML नोड का प्रतिनिधित्व करता है, तो आपको पहले का उपयोग करना होगा।

style के मामले में, पहले व्यक्ति की दृढ़ता से अनुशंसा की जाती है।

यह एक उदाहरण (आधुनिक ब्राउज़रों में) के साथ स्पष्ट करने के लिए:

document.body.style.border = "1px solid red"; 
console.log(document.body.style); // [object CSSStyleDeclaration] 
console.log(document.body.getAttribute("style")); // "border: 1px solid red;" 
+1

उत्तर के लिए धन्यवाद ... यही कारण है कि मुझे चेतावनी मिलती है (document.getElementById ('myId')। शैली) सीएसएस स्टाइल घोषणा और चेतावनी (document.getElementById ('myId')। शैली) स्ट्रिंग http: // jsfiddle के रूप में। नेट/आरक्यूआरआरजे /? –

+1

mhm, मुझे यकीन नहीं है कि मुझे यह मिला है, आप टिप्पणी में दोनों के लिए एक ही कोड टिप्पणी करते हैं; और आपके द्वारा पोस्ट की गई jsfiddle में कोई शैली नहीं है। लेकिन व्यवहार सही है: आप एक कस्टम विशेषता सेट करते हैं, लेकिन क्योंकि किसी संपत्ति के लिए कोई मैपिंग नहीं है, तो आपके पास वह संपत्ति अनिर्धारित है। ध्यान दें कि IE के पुराने संस्करण में (कम से कम) यदि आप "विस्तार संपत्ति" सेट करते हैं तो आप इसे विशेषता के रूप में भी समाप्त कर सकते हैं, यदि यह स्ट्रिंग है। आईई में सभी विषय बहुत गड़बड़ है। – ZER0

+0

क्या कोई अन्य गुण है जो document.body पर ऑब्जेक्ट देता है।

-1

कोई फर्क नहीं पड़ता।

document.getElementById('myId').style; 

, के लिए

document.getElementById('myId').getAttribute('style'); 

getAttribute ('AttributeName') के लिए केवल उपयोग एक आशुलिपि है हो सकता है अगर AttributeName एक वैध जावास्क्रिप्ट चर नाम नहीं है तो उद्धरण में यह encapsulating एक ही रास्ता होगा इसे एक्सेस करने के लिए।

+4

यह गलत है। getAttribute गैर-मानक विशेषताओं के मान को भी वापस कर देगा। यह ऑब्जेक्ट प्रॉपर्टी नोटेशन के साथ काम नहीं करता है, क्योंकि इन गैर-मानक विशेषताओं को गुणों में परिवर्तित नहीं किया जाता है। http://jsfiddle.net/rQrRj/ –

+0

उत्तर के लिए धन्यवाद ... –

+2

यह सही नहीं है।वास्तव में, यदि वे वही थे तो आपको एक ही परिणाम प्राप्त करना चाहिए और दोनों शैली को सेट करना चाहिए। हालांकि, क्योंकि आपके द्वारा प्राप्त मूल्य अलग है, वे समान नहीं हैं। देखें: 'document.getElementById ("myId")। GetAttribute ("style")। Border = "1px ठोस लाल" 'दस्तावेज़.getElementById (" myId ") की तुलना करें। Style.border =" 1px ठोस लाल ";' असल में पहली विधि स्ट्रिंग को ऑब्जेक्ट ('CSSStyleDeclaration') नहीं देती है। – ZER0

4

getAttribute अमानक विशेषताओं के मूल्य के साथ ही मानक वाले वापस आ जाएगी।

ऑब्जेक्ट प्रॉपर्टी नोटेशन नहीं होगा, क्योंकि गैर मानक गुण गुणों में परिवर्तित नहीं होते हैं।

<a id="test" foo="bar"> ... </a>​ 

<script> 

    console.log(document.getElementById('test').foo); // undefined 

    console.log(document.getElementById('test').getAttribute('foo')); // "bar" 

</script> 
-2

हाँ वहाँ कोई अंतर नहीं है और विस्तृत उदाहरण दिए गए लिंक पर पाया जा सकता है: https://developer.mozilla.org/en/DOM/element.style#Example

+0

आपको शायद कुछ अन्य उत्तरों को पढ़ना चाहिए। –

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