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


308

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

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

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

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


Вы можете перефразировать? что вы подразумеваете под типом элемента?
Абдул Муним


Ответы:


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

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


26

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


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

16

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

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

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

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

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




3

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

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

см DOM Core

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