मुझे लगता है कि टिम ने इसे काफी अच्छा कहा है , लेकिन चलो वापस कदम:
एक DOM एलिमेंट एक ऑब्जेक्ट है, मेमोरी में एक चीज है। ओओपी में अधिकांश वस्तुओं की तरह, इसमें गुण हैं । यह भी, अलग से, तत्व पर परिभाषित विशेषताओं का एक नक्शा है (आमतौर पर मार्कअप से आता है कि ब्राउज़र तत्व बनाने के लिए पढ़ता है)। तत्व के के कुछ गुण उनके प्राप्त प्रारंभिक से मान गुण एक या समान नाम (के साथ value"मूल्य" विशेषता के अपने प्रारंभिक मूल्य हो जाता है; href"href" विशेषता के अपने प्रारंभिक मूल्य हो जाता है, लेकिन यह वास्तव में एक ही मूल्य नहीं है, classNameसे "वर्ग" विशेषता)। अन्य संपत्तियों को उनके प्रारंभिक मूल्यों को अन्य तरीकों से प्राप्त होता है: उदाहरण के लिए, parentNodeसंपत्ति को इसका मूल्य उसके मूल तत्व के आधार पर मिलता है;style संपत्ति, चाहे उसकी "शैली" विशेषता हो या न हो।
आइए इस एंकर पर एक पृष्ठ पर विचार करें http://example.com/testing.html:
<a href='foo.html' class='test one' name='fooAnchor' id='fooAnchor'>Hi</a>
कुछ आभारी कला ASCII (और बहुत सारा सामान छोड़कर):
+ ------------------------------------------- +
| HTMLAnchorElement |
+ ------------------------------------------- +
| href: "http://example.com/foo.html" |
| नाम: "fooAnchor" |
| आईडी: "fooAnchor" |
| className: "टेस्ट वन" |
| विशेषताएँ: |
| href: "foo.html" |
| नाम: "fooAnchor" |
| आईडी: "fooAnchor" |
| वर्ग: "परीक्षण एक" |
+ ------------------------------------------- +
ध्यान दें कि गुण और गुण अलग-अलग हैं।
अब, हालांकि वे अलग-अलग हैं, क्योंकि यह सब जमीन से डिजाइन किए जाने के बजाय विकसित हुआ है, कई गुणों को वे उस विशेषता पर वापस लिखते हैं जिसे उन्होंने निर्धारित किया था। लेकिन सभी नहीं करते हैं, और जैसा कि आप hrefऊपर से देख सकते हैं , मानचित्रण हमेशा एक सीधा "पास ऑन वैल्यू" नहीं होता है, कभी-कभी इसमें व्याख्या भी शामिल होती है।
जब मैं किसी वस्तु के गुणों के बारे में बात करता हूं, तो मैं अमूर्त में नहीं बोल रहा हूं। यहाँ कुछ गैर- jQuery कोड है:
var link = document.getElementById('fooAnchor');
alert(link.href); // alerts "http://example.com/foo.html"
alert(link.getAttribute("href")); // alerts "foo.html"
(वे मान अधिकांश ब्राउज़रों के अनुसार हैं; कुछ भिन्नताएँ हैं।)
linkवस्तु एक असली बात है, और तुम वहाँ एक तक पहुँचने के बीच कोई वास्तविक अंतर है देख सकते हैं संपत्ति उस पर, और एक तक पहुँचने विशेषता ।
जैसा कि टिम ने कहा, समय का विशाल बहुमत , हम गुणों के साथ काम करना चाहते हैं। आंशिक रूप से ऐसा इसलिए है क्योंकि उनके मूल्य (उनके नाम भी) ब्राउज़रों में अधिक सुसंगत हैं। हम ज्यादातर केवल उन विशेषताओं के साथ काम करना चाहते हैं जब इससे संबंधित कोई संपत्ति नहीं है (कस्टम विशेषताएँ), या जब हम जानते हैं कि उस विशेष विशेषता के लिए, विशेषता और संपत्ति 1: 1 नहीं है (जैसा कि hrefऊपर और "href" के साथ है) ।
मानक गुण विभिन्न DOM चश्मा में निर्धारित किए गए हैं:
इन स्पेक्स में बेहतरीन इंडेक्स होते हैं और मैं इन्हें लिंक रखने की सलाह देता हूं; मुझे उन्हें हर समय इस्तेमाल करना है।
उदाहरण के लिए, data-xyzआपके द्वारा अपने कोड में मेटा-डेटा प्रदान करने के लिए तत्वों पर रखी गई कोई भी विशेषता , उदाहरण के लिए, (जब तक कि आप data-उपसर्ग से चिपके हों, HTML5 के रूप में मान्य है )। (JQuery के हाल के संस्करण आपको फ़ंक्शन के data-xyzमाध्यम से तत्वों तक पहुंच प्रदान करते dataहैं, लेकिन यह फ़ंक्शन विशेषताओं के लिए सिर्फ एक एक्सेसर नहीं हैdata-xyz [यह दोनों की तुलना में अधिक और कम करता है]; जब तक आपको वास्तव में इसकी विशेषताओं की आवश्यकता नहीं होती है, मैं attrफ़ंक्शन को इंटरैक्ट करने के लिए उपयोग करूंगा; data-xyzविशेषता के साथ ।)
इस attrफ़ंक्शन के पास कुछ जटिल तर्क होते थे, जो कि वे चाहते थे कि आप वास्तव में विशेषता प्राप्त करने के बजाय चाहते थे। इसने अवधारणाओं को सीमित कर दिया। करने के लिए आगे बढ़ रहा था propऔर attrउन्हें डी-कन्फ़ल करने के लिए था। संक्षेप में v1.6.0 में jQuery उस संबंध में बहुत दूर चला गया, लेकिन सामान्य परिस्थितियों को संभालने के लिए कार्यक्षमता को जल्दी से वापस जोड़ा गया , attrजहां लोग attrतकनीकी रूप से उपयोग करते समय उनका उपयोग करते हैं prop।