.TagName और .nodeName के बीच अंतर


137

बीच क्या अंतर है $('this')[0].nodeNameऔर $('this')[0].tagName?


10
यह प्रश्न एक डोम प्रश्न से अधिक है क्योंकि यह jquery के लिए विशिष्ट नहीं है।
ग्रेग

जवाबों:


126

tagNameसंपत्ति के लिए विशेष रूप मतलब है तत्व नोड्स (1 नोड्स टाइप) के प्रकार के प्राप्त करने के लिए तत्व

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

nodeNameएक तत्व नोड के खिलाफ उपयोग करते समय , आपको इसका टैग नाम मिल जाएगा, इसलिए या तो वास्तव में उपयोग किया जा सकता है, हालांकि उपयोग करते समय आपको ब्राउज़र के बीच बेहतर निरंतरता मिलेगी nodeName


45

यह दोनों के बीच अंतर का बहुत अच्छा विवरण है।


लेख से जोड़ा गया पाठ:

tagNameऔर nodeNameदोनों एक HTML तत्व के नाम की जाँच के लिए उपयोगी जावास्क्रिप्ट गुण हैं। अधिकांश उद्देश्यों के लिए, या तो ठीक है, लेकिन नोडनेम पसंद किया जाता है यदि आप केवल ए-ग्रेड ब्राउज़रों का समर्थन कर रहे हैं और टैगनाम को पसंद किया जाता है यदि आप IE5.5 के साथ ही समर्थन करना चाहते हैं।

इसके साथ दो मुद्दे हैं tagName:

  • IE के सभी संस्करणों में, टैगनाम !जब एक टिप्पणी नोड पर बुलाया जाता है
  • टेक्स्ट नोड्स के लिए, टैगनाम रिटर्न करता है undefinedजबकि नोडनेम रिटर्न#text

nodeNameमुद्दों का अपना सेट है, लेकिन वे कम गंभीर हैं:

  • IE 5.5 !जब एक टिप्पणी नोड पर बुलाया जाता है। यह टैगनाम की तुलना में कम हानिकारक है जो IE के सभी संस्करणों में इस व्यवहार से ग्रस्त है
  • IE 5.5 documentतत्व या विशेषताओं के लिए नोडनेम का समर्थन नहीं करता है । न तो इनमें से अधिकांश व्यावहारिक उद्देश्यों के लिए एक चिंता का विषय होना चाहिए बल्कि किसी भी मामले में ध्यान में रखा जाना चाहिए
  • इस संपत्ति का उपयोग करते समय कोनकेर टिप्पणी नोड्स की उपेक्षा करता है। लेकिन उसके बाद फिर से, Konqueror, IE 5.5 के साथ एक ए-ग्रेड ब्राउज़र नहीं है

तो अधिकांश व्यावहारिक उद्देश्यों के nodeNameलिए परिदृश्यों की एक विस्तृत श्रृंखला और संभवतः बेहतर आगे संगतता के लिए इसके समर्थन के कारण छड़ी । यह उल्लेख नहीं करने के लिए कि यह एक टिप्पणी नोड पर हिचकी नहीं है, जिसमें अघोषित रूप से कोड में रेंगने की प्रवृत्ति है। IE 5.5 या कोनेकर के बारे में चिंता न करें क्योंकि उनका बाजार हिस्सा 0% के पास है।


17

डोम कोर कल्पना में उन गुणों के बारे में पढ़ें।

nodeNameनोड इंटरफ़ेस में परिभाषित संपत्ति है
http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-F68D095

tagNameतत्व इंटरफ़ेस में परिभाषित संपत्ति है
http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-104682815

Btw डोम इंटरफ़ेस प्रत्येक नोड द्वारा DOM ट्री ( documentऑब्जेक्ट सहित ) में लागू किया गया है। तत्व इंटरफ़ेस केवल डोम ट्री में उन नोड्स द्वारा लागू किया जाता है जो HTML दस्तावेज़ में तत्वों का प्रतिनिधित्व करते हैं ( nodeType=== 1 के साथ नोड्स )।


4

और फ़ायरफ़ॉक्स 33 और क्रोम 38 पर यही होता है:

HTML:

<div class="a">a</div>

जे एस:

node = e
node.nodeType === 1
node.nodeName === 'DIV'
node.tagName  === 'DIV'

node = e.getAttributeNode('class')
node.nodeType === 2
node.nodeName === 'class'
node.tagName  === undefined

node = e.childNodes[0]
node.nodeType === 3
node.nodeName === '#text'
node.tagName  === undefined

इसलिए:

  • केवल nodeTypeनोड प्रकार प्राप्त करने के लिए उपयोग करें: के लिए nodeNameविरामnodeType === 1
  • केवल उपयोग tagNameके लिएnodeType === 1

3
" nodeNameब्रेक फॉर nodeType === 1" कैसे होता है ?
WD40
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.