jQuery: получить имя тега выбранного элемента


641

Есть ли простой способ получить имя тега?

Например, если мне дают $('a')функцию, я хочу получить 'a'.


Ответы:


1032

Вы можете позвонить .prop("tagName"). Примеры:

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


Если писать .prop("tagName")утомительно, вы можете создать собственную функцию, например:

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

Примеры:

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


Обратите внимание, что имена тегов по соглашению возвращаются в CAPITALIZED . Если вы хотите, чтобы возвращаемое имя тега было строчным, вы можете отредактировать пользовательскую функцию следующим образом:

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

Примеры:

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

18
Начиная с jQuery 1.6, это должно быть .prop.
Ракета Хазмат

3
Соглашение о капитализации соблюдается всеми браузерами? Если нет, нормализует ли это jQuery?
Каллум

8
tagName является частью спецификации DOM и всегда с большой буквы.
августа

Обратите внимание, что возвращаемая строка написана ЗАГЛАВНЫМИ БУКВАМИ. Это будет недоразумением, если вы попытаетесь сравнить его с "div" или "a", например.
Хартли Броуди

3
Использование toLowerCase()или toUpperCase()может быть полезно при сравнении prop('tagName')результата с именем тега. if($("my_selector").prop("tagName").toLowerCase() == 'div')илиif($("my_selector").prop("tagName").toUpperCase() == 'DIV')
Тионгане

99

Вы можете использовать nodeNameсвойство DOM :

$(...)[0].nodeName

Спасибо. Прекрасно работает - хотя я буду использовать более jQueryish версию, потому что сейчас я нахожусь в мире jQuery.
конфигуратор

6
Чистые решения JS (подобные этому), как правило, превосходят решения jQuery, особенно если они не страдают от проблем совместимости браузера или являются более многословными.
Стивен Лу

25
... и, в частности, из-за проблем с несовместимостью браузеров, jQuery часто лучше, если кто-то выбирает решение и не очень хорошо разбирается в том, какие браузерные несовместимости нужно остерегаться. ;)
Скотт Стаффорд

4
Я считаю это превосходным, потому что не имеет значения, какая версия jQuery, это решение работает на всех версиях. +1
Стейн де Витт

7
особенно если вы находитесь в ситуации, подобной each (), где вам нужно привести элемент обратно к объекту jquery, чтобы получить свойство, которое уже было там, например $(this).prop('tagname'). this.nodeName часто более эффективен. +1
обычная щука



23

Это еще один способ:

$('selector')[0].tagName

Хороший! Четче, чем nodeName и даже короче. : P
Dennis98

11

Вы должны НЕ использовать jQuery('selector').attr("tagName").toLowerCase(), потому что он работает только в старых версиях Jquery.

Вы можете использовать, $('selector').prop("tagName").toLowerCase()если уверены, что используете версию jQuery, которая> = версия 1.6.


Замечания :

Вы можете подумать, что КАЖДЫЙ сейчас использует jQuery 1.10+ или что-то еще (январь 2016 г.), но, к сожалению, это не совсем так. Например, многие люди сегодня все еще используют Drupal 7, и каждый официальный выпуск Drupal 7 по сей день включает в себя jQuery 1.4.4 по умолчанию.

Так что, если вы не знаете наверняка, будет ли ваш проект использовать jQuery 1.6+, рассмотрите возможность использования одного из вариантов, которые работают для ВСЕХ версий jQuery:

Опция 1 :

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

Вариант 2

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

0

nodeName даст вам имя тега в верхнем регистре, а localName даст вам строчный.

$("yourelement")[0].localName 

даст вам: вы вместо себя

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.