Получить тип элемента с помощью jQuery

308

Можно ли с помощью jQuery узнать тип элемента с помощью jQuery? Например, является ли элемент div, span, select или input?

Например, если я пытаюсь загрузить значения в раскрывающийся список с помощью jQuery, но тот же сценарий может генерировать код в набор переключателей, могу ли я создать что-то вроде:

$('.trigger').live('click', function () {
   var elementType = $(this).prev().attr(WHAT IS IT);
});

Учитывая выпадающий список с кнопкой рядом с ним с классом триггера , моя elementTypeпеременная должна возвращаться selectпри нажатии кнопки.

Джейми Хартнолл
источник
Вы можете перефразировать? что вы подразумеваете под типом элемента?
Абдул Муним
Возможный дубликат поиска типа элемента с использованием jQuery
Феликс Клинг

Ответы:

558

Получение типа элемента способом jQuery:

var elementType = $(this).prev().prop('nodeName');

делать то же самое без JQuery

var elementType = this.previousSibling.nodeName;

Проверка для определенного типа элемента:

var is_element_input = $(this).prev().is("input"); //true or false
adeneo
источник
16
Просто помните, что функция .prop () была добавлена ​​только в jQuery 1.6 - вам может потребоваться обновить версию, которую вы используете!
xgretsch
Не работал со старым jQuery 1.3.2, поэтому обновился до последнего и работал нормально.
Дамодар Башял
2
Это можно улучшить, переключив «tagName» на «nodeName», как упомянуто здесь .
Кайл Стофлет
1
@KyleStoflet - кажется, вы правы, nodeNameподдерживает больше типов элементов, и поддержка IE5.5 больше не должна быть проблемой, поэтому я не вижу проблем с переходом tagNameна nodeNameприведенный выше ответ. Оба будут отлично работать для элементов, а последний будет работать и с текстовыми узлами, атрибутами и т. Д.
Аденео
3
Работает, но меня немного смутила prev (), которая специфична для рассматриваемого примера кода. В основном,$(this).is("input");
Fanky
56

Также вы можете использовать:

$("#elementId").get(0).tagName
Али
источник
26

Вы должны использовать tagNameсвойство и attr('type')для входов

Distdev
источник
Пример мог бы сделать этот комментарий сильнее.
Justapigeon
16

Как намекал Distdev, вам все равно нужно различать тип ввода. То есть

$(this).prev().prop('tagName');

скажу вам input, но это не делает различий между флажком / текстом / радио. Если это вход, вы можете использовать

$('#elementId').attr('type');

чтобы сказать вам флажок / текст / радио, чтобы вы знали, что это за контроль.

Джеймс Туми
источник
9

Вы можете использовать .is():

  $( "ul" ).click(function( event ) {
      var target = $( event.target );
      if ( target.is( "li" ) ) {
         target.css( "background-color", "red" );
      }
  });

увидеть источник

Мухаммед Суфиан
источник
3

Использовать Nodename вместо tagName:

nodeName содержит все функции tagName, а также некоторые другие. Поэтому nodeName всегда лучший выбор.

см DOM Core

Майк Рифгин
источник