ChatGPT解决这个技术问题 Extra ChatGPT

jQuery: Get selected element tag name

Is there an easy way to get a tag name?

For example, if I am given $('a') into a function, I want to get 'a'.


r
rgajrawala

You can call .prop("tagName"). Examples:

jQuery("<a>").prop("tagName"); //==> "A"
jQuery("<h1>").prop("tagName"); //==> "H1"
jQuery("<coolTagName999>").prop("tagName"); //==> "COOLTAGNAME999"


If writing out .prop("tagName") is tedious, you can create a custom function like so:

jQuery.fn.tagName = function() {
  return this.prop("tagName");
};

Examples:

jQuery("<a>").tagName(); //==> "A"
jQuery("<h1>").tagName(); //==> "H1"
jQuery("<coolTagName999>").tagName(); //==> "COOLTAGNAME999"

Note that tag names are, by convention, returned CAPITALIZED. If you want the returned tag name to be all lowercase, you can edit the custom function like so:

jQuery.fn.tagNameLowerCase = function() {
  return this.prop("tagName").toLowerCase();
};

Examples:

jQuery("<a>").tagNameLowerCase(); //==> "a"
jQuery("<h1>").tagNameLowerCase(); //==> "h1"
jQuery("<coolTagName999>").tagNameLowerCase(); //==> "cooltagname999"

AS of jQuery 1.6, this should be .prop.
Is the capitalisation convention followed by all browsers? If not, does jQuery normalise this?
tagName is part of the DOM spec and is always capitalized.
Note that the string that's returned is in CAPITAL LETTERS. This'll be a gotcha if you're trying to compare it to "div" or "a" for example.
using toLowerCase() or toUpperCase() may be helpful when comparing prop('tagName') result to a tag name. if($("my_selector").prop("tagName").toLowerCase() == 'div') or if($("my_selector").prop("tagName").toUpperCase() == 'DIV')
G
GetFree

You can use the DOM's nodeName property:

$(...)[0].nodeName

Thanks. Works great - although I'll use the more jQueryish version because I'm in a jQuery world at the moment.
pure JS solutions (like this one) are generally superior to jQuery ones especially if they do not suffer from browser compatibility problems or are much more verbose.
... and specifically because of those browser incompatibility issues, the jQuery ones are often superior if someone is picking a solution and isn't well-versed in what browser-incompatibilities to watch out for. ;)
I consider this superior because it doesn't matter what the jQuery version is, this solution works on all versions. +1
particularly if you are in a each()-like situation, where you have to cast the element back to a jquery object to get a property that was already there, like $(this).prop('tagname'). this.nodeName is often more efficient. +1
R
Rob

As of jQuery 1.6 you should now call prop:

$target.prop("tagName")

See http://api.jquery.com/prop/


S
SwissCodeMen

jQuery 1.6+

jQuery('selector').prop("tagName").toLowerCase()

Older versions

jQuery('selector').attr("tagName").toLowerCase()

toLowerCase() is not mandatory.


Why are you doing new String?
Because toLowerCase() is a method of String
C
Chepech

This is yet another way:

$('selector')[0].tagName

Nice one! Clearer than nodeName and even shorter. :P
J
John Slegers

You should NOT use jQuery('selector').attr("tagName").toLowerCase(), because it only works in older versions of Jquery.

You could use $('selector').prop("tagName").toLowerCase() if you're certain that you're using a version of jQuery thats >= version 1.6.

Note :

You may think that EVERYONE is using jQuery 1.10+ or something by now (January 2016), but unfortunately that isn't really the case. For example, many people today are still using Drupal 7, and every official release of Drupal 7 to this day includes jQuery 1.4.4 by default.

So if do not know for certain if your project will be using jQuery 1.6+, consider using one of the options that work for ALL versions of jQuery :

Option 1 :

jQuery('selector')[0].tagName.toLowerCase()

Option 2

jQuery('selector')[0].nodeName.toLowerCase()

D
Donovan P

nodeName will give you the tag name in uppercase, while localName will give you the lower case.

$("yourelement")[0].localName 

will give you : yourelement instead of YOURELEMENT


M
Mahdi Bashirpour

get clicked tag name with jQuery

jQuery("YOUR_SELECTOR").click(function (e) {
     console.log(jQuery(e.target).prop("tagName").toLowerCase())
})