Ryan King
Ryan King

Reputation: 3696

jQuery tag name of element

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?

Upvotes: 16

Views: 64909

Answers (2)

radu florescu
radu florescu

Reputation: 4353

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());
    });     
})

Upvotes: 5

ssilas777
ssilas777

Reputation: 9804

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")

Upvotes: 43

Related Questions