jQuery में .prop() बनाम .attr(): उदाहरणों के साथ चरण-दर-चरण विश्लेषण

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

परिचय: यह विषय इतना महत्वपूर्ण क्यों है?

\n

यदि आपने कभी jQuery में कोड लिखा है जो किसी HTML तत्व की विशेषता (attribute) का मान प्राप्त या सेट करने वाला था, तो आपने निश्चित रूप से दो विधियों का सामना किया होगा: .prop() और .attr()। पहली नज़र में वे एक ही काम करते हैं। लेकिन व्यवहार में, उनके बीच का अंतर सैकड़ों बगों और Stack Overflow पर हज़ारों प्रश्नों का स्रोत है।

\n

इस चरण-दर-चरण ट्यूटोरियल में, हम एक बार और हमेशा के लिए समझेंगे कि jQuery में .prop() और .attr() कैसे भिन्न हैं, कब किसका उपयोग करना है, और जाल में कैसे नहीं फँसना है। हम लाइव कोड लिखेंगे, ब्राउज़र के वास्तविक व्यवहार को देखेंगे और एक सरल नियम याद रखेंगे।

\n

यह लेख कोई सूखा दस्तावेज़ नहीं है। यह jQuery में सबसे भ्रमित करने वाले विषयों में से एक के लिए आपकी व्यक्तिगत मार्गदर्शिका है।

\n\n

संक्षेप में: विशेषताएँ बनाम गुण

\n

कोड में गोता लगाने से पहले, आइए सिद्धांत को समझें। DOM (Document Object Model) में दो अवधारणाएँ हैं:

\n
    \n
  • विशेषता (attribute) — वह जो HTML कोड में लिखा गया है। उदाहरण के लिए, <input type="checkbox" checked="checked">। विशेषताएँ हमेशा स्ट्रिंग होती हैं।
  • \n
  • गुण (property) — वह जो ब्राउज़र द्वारा HTML पढ़ने के बाद DOM तत्व ऑब्जेक्ट में संग्रहीत होता है। गुण किसी भी डेटा प्रकार के हो सकते हैं: स्ट्रिंग, बूलियन, संख्या, ऑब्जेक्ट।
  • \n
\n

.attr() विधि विशेषताओं के साथ काम करती है। .prop() विधि गुणों के साथ काम करती है। सरल लगता है? हाँ, लेकिन इसमें कुछ बारीकियाँ हैं।

\n\n

मुख्य जाल: बूलियन विशेषताएँ

\n

सबसे लोकप्रिय उदाहरण जो शुरुआती लोगों को भ्रमित करता है, वह है चेकबॉक्स, रेडियो बटन और अन्य तत्व जिनमें बूलियन विशेषताएँ (checked, disabled, selected, readonly) होती हैं।

\n

कल्पना करें कि आपके पास ऐसा HTML है:

\n
<input type="checkbox" id="myCheckbox" checked>
\n

आप जाँचना चाहते हैं कि चेकबॉक्स चिह्नित है या नहीं। यह लिखना तर्कसंगत है:

\n
console.log( $('#myCheckbox').attr('checked') ); // "checked" (स्ट्रिंग!)\nconsole.log( $('#myCheckbox').prop('checked') ); // true (बूलियन!)
\n

यह रहा अंतर! .attr() स्ट्रिंग "checked" लौटाता है यदि HTML में विशेषता मौजूद है, और undefined यदि नहीं है। जबकि .prop() DOM में तत्व की वर्तमान स्थिति के आधार पर true या false लौटाता है।

\n

अब सबसे दिलचस्प बात: यदि उपयोगकर्ता निशान हटा दे तो क्या होगा?

\n
// उपयोगकर्ता द्वारा निशान हटाने के बाद:\nconsole.log( $('#myCheckbox').attr('checked') ); // "checked"! (HTML नहीं बदला)\nconsole.log( $('#myCheckbox').prop('checked') ); // false (स्थिति बदल गई)
\n

यही कारण है कि चेकबॉक्स की स्थिति जाँचने के लिए .attr() का उपयोग करना एक गलती है। HTML में checked विशेषता अपरिवर्तित रहती है, जबकि DOM में checked गुण गतिशील रूप से बदलता है। .prop() हमेशा सटीक उत्तर देता है।

\n\n

अंगूठे का नियम

\n

एक सरल नियम है जो आपको गलतियाँ करने से बचाएगा:

\n
    \n
  • .prop() का उपयोग करें जब आपको किसी तत्व की गतिशील स्थिति प्राप्त या बदलनी हो (उदाहरण के लिए, checked, disabled, selected, input का value)।
  • \n
  • .attr() का उपयोग करें जब आपको HTML से स्थिर विशेषता पढ़नी या बदलनी हो (उदाहरण के लिए, href, src, data-*, id, class)।
  • \n
\n

याद रखें: .prop() — उन गुणों के लिए जो काम के दौरान बदलते हैं। .attr() — उन विशेषताओं के लिए जो मार्कअप में निर्धारित हैं।

\n\n

चरण-दर-चरण उदाहरण: disabled के साथ काम करना

\n

आइए एक और क्लासिक मामले पर विचार करें — disabled विशेषता वाला एक बटन।

\n
<button id="myButton" disabled>मुझे दबाएँ</button                

ब्लॉग

पुस्तक अनुशंसाएँ