क्या jQuery टैग नाम प्रदान कर सकता है?


115

मुझे एक HTML पृष्ठ पर कई तत्व मिले हैं जिनमें एक ही वर्ग है - लेकिन वे विभिन्न तत्व प्रकार हैं। मैं तत्व का टैग नाम पता लगाना चाहता हूं क्योंकि मैं उन पर लूप करता हूं - लेकिन .attr "टैग" या "tagname" नहीं लेता है।

यहाँ मेरा मतलब है। एक पृष्ठ पर इन तत्वों पर विचार करें:

<h1 class="rnd">First</h1>
<h2 id="foo" class="rnd">Second</h2>
<h3 class="rnd">Third</h3>
<h4 id="bar" class="rnd">Fourth</h4>

अब मैं कुछ इस तरह से चलना चाहता हूं ताकि यह सुनिश्चित हो सके कि मेरे तत्वों में एक आईडी है यदि कोई पहले से परिभाषित नहीं था:

$(function() {
  $(".rnd").each(function(i) {
    var id = $(this).attr("id");
    if (id === undefined || id.length === 0) {
      // this is the line that's giving me problems.
      // .attr("tag") returns undefined
      $(this).attr("id", "rnd" + $(this).attr("tag") + "_" + i.toString());
    }
  });
});

परिणाम मैं यह चाहूंगा कि H2 और H4 तत्वों की एक आईडी होगी

rndh2_1
rndh4_3

क्रमशः।

किसी भी विचार पर कि मैं "यह" द्वारा दर्शाए गए तत्व का टैग नाम कैसे खोज सकता हूं?


1
शायद इसका जवाब यहाँ है: stackoverflow.com/a/8355251/271103
हक़न KOSE

जवाबों:


110
$(this).attr("id", "rnd" + $(this).attr("tag") + "_" + i.toString());

होना चाहिए

$(this).attr("id", "rnd" + this.nodeName.toLowerCase() + "_" + i.toString());

18
आपको इस .nodeName.toLowerCase () का उपयोग करने की आवश्यकता होगी, क्योंकि HTML दस्तावेज़ों के अधिकांश DOM अभ्यावेदन स्वतः ही नोडनेम को अपरकेस कर देते हैं।
निकफित्ज़

यह। nodeName और this.tagName दोनों मेरे लिए काम करते हैं। सबको शुक्रीया!
BigPigVT

5
नोडनेम का उल्लेख करने के लिए +1। कभी-कभी, jQuery एक कदम बहुत दूर है :-)
सर्ज वुटियर

2
+1 jQuery है () h1, h2, आदि के मामले में काम नहीं करता है क्योंकि 6 अलग-अलग मामले हैं जिन्हें आपको संभालना है यदि उपयोग करना है ()।
कोनस्टेंटिन दिनेव

166

आप यह कोशिश कर सकते हैं:

if($(this).is('h1')){
  doStuff();
}

अधिक के लिए डॉक्स देखें ()।


12
किसके लिए यह चिंता का विषय हो सकता है: यदि आप मेरे जवाब को कम करते हैं, तो कृपया मुझे बताएं कि मैं इसे क्यों सुधार सकता हूं और भविष्य के एसओ-उत्तरों के लिए सीख सकता हूं। धन्यवाद।
21

3
मुझे इससे भी नफरत है। वैसे भी मैंने अपवित्र किया क्योंकि nodeNameएक स्ट्रिंग देता है जो ब्राउज़र पर निर्भर करता है, ऊपरी आवरण या नहीं।
मार्सेल फॉलियर

2
निम्नलिखित मान लें: आपके पास संभावित टैग का एक छोटा चयन नहीं है, लेकिन यह 100+ html टैग में से कोई भी हो सकता है। फिर आपको लिखना होगा: $ (यह) .is ('someag') 100+ बार। मुझे लगता है यही वजह है कि कुछ लोगों ने आपके जवाब को गलत ठहराया।
२०:०६ पर ximi

वाह ... is('*')सालों में कभी नहीं देखा । यह शायद ओपी का जवाब नहीं देगा, लेकिन यह मेरे लिए काम किया, धन्यवाद, @middus!
एलिस्टर

53

चूंकि मैंने एक बार पहले भी इस सवाल को मारा है और इससे मुझे अपने मामले में मदद नहीं मिली (मेरे पास एक नहीं था this, लेकिन इसके बजाय एक jQuery चयनकर्ता उदाहरण था)। कॉल get()करने पर आपको HTML तत्व मिलेगा, जिसके द्वारा आप nodeNameऊपर बताए अनुसार प्राप्त कर सकते हैं ।

this.nodeName; // In a event handler, 'this' is usually the element the event is called on

या

$('.hello:first-child').get(0).nodeName; // Use 'get' or simply access the jQuery Object like an array
$('.hello:first-child')[0].nodeName;     // will get you the original DOM element object

1
पृष्ठ पर पहला मददगार
मुर्गा

47

$(this).prop('tagName');यदि आप jQuery 1.6 या उच्चतर का उपयोग कर रहे हैं, तो आप इसका उपयोग भी कर सकते हैं ।


मुझे ठीक इसी की आवश्यकता थी। मेरे डिजाइन में, मेरे पास jquery तत्व काम था, लेकिन मूल HTML DOM तत्व नहीं था। यह मेरे लिए काम करता है।
गिल्टहंस

मुझे लगता है कि यह सटीक उत्तर है जो इस प्रश्न के विषय का उत्तर देता है।
कोडटाइवी


1

मुझे लगता है कि आप nodeNamejQuery में उपयोग नहीं कर सकते क्योंकि नोडनेम एक DOM प्रॉपर्टी है और jQuery के पास या तो nodeNameफंक्शन या प्रॉपर्टी नहीं है। लेकिन उत्तरदाता के आधार पर जिसने पहले इस nodeNameसामान के बारे में उल्लेख किया था , इस तरह से मैं समस्या को हल करने में सक्षम था:

this.attr("id", "rnd" + this.attr("nodeName") + "_" + i.toString());

नोट: thisयहाँ एक jQuery वस्तु है।


0

चूँकि यह एक ऐसा सवाल है जो आप गूगल पर jquery tagname पहले बच्चे के साथ एक प्रश्न के रूप में उपयोग कर रहे हैं जो मैं एक और उदाहरण पोस्ट करूँगा:

<div><p>Some text, whatever</p></div>

$('div').children(':first-child').get(0).tagName); // ...and not $('div:first-child')[...]

Jquery परिणाम एक (अपरकेस) tagname: P है


0

आप पूरे पृष्ठ पर html तत्व टैग नाम प्राप्त कर सकते हैं।

आप उपयोग कर सकते हैं:

        $('body').contents().on("click",function () {
          var string = this.tagName;
          alert(string);
         });

0
you can try:
jQuery(this).get(0).tagName;
or
jQuery(this).get(0).nodeName;

नोट: इसे अपने चयनकर्ता (h1, h3 या ...) से बदलें


0

मैंने केवल इसे किसी अन्य मुद्दे के लिए लिखा था और सोचा था कि यह आपकी भी मदद कर सकता है।

उपयोग:

  • अर्थात onclick="_DOM_Trackr(this);"

पैरामीटर:

  1. DOM- ऑब्जेक्ट टू ट्रेस
  2. वापसी / चेतावनी स्विच (वैकल्पिक, डिफ़ॉल्ट = चेतावनी)

सोर्स कोड:

function _DOM_Trackr(_elem,retn=false)
{
    var pathTrackr='';
    var $self=$(_elem).get(0);
    while($self && $self.tagName)
    {
        var $id=($($self).attr("id"))?('#'+$($self).attr("id")):'';
        var $nName=$self.tagName;
        pathTrackr=($nName.toLowerCase())+$id+((pathTrackr=='')?'':' > '+(pathTrackr));
        $self=$($self).parent().get(0);
    }
    if (retn)
    {
        return pathTrackr;
    }
    else
    {
        alert(pathTrackr);
    }
}

उदाहरण आउटपुट:html > body > div#coreApp > div#productpage > div#productpage-wrapper > div > div > div > div > div#pthumb12 > form#thumb_uploader_src > input
क्रिस एस।

एक अन्य उपयोग उदाहरण: $('*').each(function(_i,_e){$(_e).attr('title',_DOM_Trackr(_e,true));});
क्रिस एस

0

अपनी समस्या को ठीक करने का सबसे अच्छा तरीका है, या $(this).attr("tag")तो साथ में बदलना this.nodeName.toLowerCase()या this.tagName.toLowerCase()

दोनों एक ही परिणाम का उत्पादन!


0

तेजी से फ़िल्टर विधि पर विचार करें :

$('.rnd').filter('h2,h4')

रिटर्न:

[<h2 id=​"foo" class=​"rnd">​Second​</h2>​, <h4 id=​"bar" class=​"rnd">​Fourth​</h4>​]

इसलिए:

$('.rnd').filter('h2,h4').each(function() { /*...$(this)...*/ });

0

इसके बजाय बस करो:

$(function() {
  $(".rnd").each(function(i) {
    var id = $(this).attr("id");
    if (id === undefined || id.length === 0) {
      // this is the line that's giving me problems.
      // .attr("tag") returns undefined
      // change the below line...
      $(this).attr("id", "rnd" + this.tagName.toLowerCase() + "_" + i.toString()); 
  });
});
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.