16

I'm try to get an elements tag name in jQuery.

I have the following html:

<div class="section" id="New_Revision">

    <h1>New Revision&nbsp<img alt="Lock_closed" class="edit" data-id="1" src="/assets/lock_closed.svg" /></h1>

    <p>This is a test paragraph.</p>

    <ol class="references">
      <li>test</li>
    </ol>
</div>

And javascript:

$(".edit").click(function(){
    $(this).closest("div.section").children().each(function(){
        alert($(this).tagName + " - " + $(this).html());
    });     
})

I've tried $(this).tagName, $(this).nodeName and $(this).attr("tag") as noted in this question: Can jQuery provide the tag name?

But I'm always getting undefined in return. The html() outputs correctly. Why can't I get the tag name of each element?

Community
  • 1
  • 1
Ryan King
  • 3,538
  • 12
  • 48
  • 72
  • Possible duplicate of [jQuery: Get selected element tag name](http://stackoverflow.com/questions/5347357/jquery-get-selected-element-tag-name) – Kaspar Lee Mar 13 '16 at 09:01

2 Answers2

43

Try

this.nodeName instead of $(this).nodeName

this refers to the DOM element itself and $(this) wraps the element up in a jQuery object.

EDIT

If you require Jquery approach you can use

$(this).prop("tagName")
ssilas777
  • 9,672
  • 4
  • 45
  • 68
5

Have you tried:

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

As stated in the linked question. Also there is a big difference between $(this) and this

Tried this in the browser console and it works:

document.getElementsByTagName("a")[0].tagName // this uses javascript

this uses jquery:

$('a').get(0).nodeName; // this works for jquery

try this:

$(".edit").click(function(){
    $(this).closest("div.section").children().each(function(){
        alert(this.tagName + " - " + $(this).html());
    });     
})
evandrix
  • 6,041
  • 4
  • 27
  • 38
radu florescu
  • 4,315
  • 10
  • 60
  • 92