Как расширить jQuery, чтобы упростить получение tagName

Я хочу расширить jQuery, чтобы я мог легко получить tagName первого элемента в объекте jQuery. Это то, что я придумал, но, похоже, это не работает:

$.fn.tagName = function() {
    return this.each(function() {
        return this.tagName;
    });
}
alert($('#testElement').tagName());

Есть идеи, что не так?

Кстати, я хочу использовать это больше для тестирования, чем для производства.

почему бы просто не использовать .attr ('tagName')

redsquare 05.01.2009 01:46

redsquare, tagName не является атрибутом!

James 05.01.2009 14:05
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
19
2
25 534
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

Попробуйте вместо этого:

$.fn.tagName = function() {
    return this.get(0).tagName;
}
alert($('#testElement').tagName());

Чтобы немного подробнее объяснить, почему ваш исходный пример не работал, метод each() всегда будет возвращать исходный объект jQuery (если сам объект jQuery не был изменен). Чтобы увидеть, что происходит в каждом из ваших кодов, вот некоторый псевдокод, который показывает, как работает метод each():

function each(action) {
    for(var e in jQueryElements) {
        action();
    }
    return jQueryObject;
}

На самом деле each() реализуется не так (вероятно, с большой долей вероятности), но чтобы показать, что возвращаемое значение вашей функции action() игнорируется.

Было бы неплохо преобразовать тег в нижний регистр. вернуть this.get (0) .tagName.toLowerCase ()

David Brockman 05.01.2009 02:40

Зачем вообще создавать плагин? Кажется немного ненужным ...

alert( $('div')[0].tagName );

Вы можете добавить toLowerCase (), чтобы сделать его более согласованным (и совместимым с XHTML).

$.fn.tagName = function() {
    return this.get(0).tagName.toLowerCase();
}

alert($('#testElement').tagName());

Это вернет тэг соответствующего элемента в нижнем регистре.

Например,

jQuery("#test_div").tagName();

вернет div (при условии, что этот элемент был div).

Если вы передаете коллекцию элементов, она возвращает массив всех тэгов, где каждая запись массива соответствует согласованному элементу.

например, если мы бежим

jQuery(".classname").tagName();

в следующем (X) HTML:

<div>
<p class = "classname">test text</p>
<div class = "anotherClass">
    <ul>
        <li class = "classname"><a href = "test">Test link</a></li>
    </ul>
    <p class = "classname">Some more text</p>
</div>
<div>

будет массив тэгов:

["p", "li", "p"]

Это функция - она ​​в основном такая же, как и выше, но поддерживает несколько элементов, которые могут быть полезны или не полезны для вашего проекта.

jQuery.fn.tagName = function(){
    if (1 === this.length){
        return this[0].tagName.toLowerCase();
    } else{
        var tagNames = [];
        this.each(function(i, el){
            tagNames[i] = el.tagName.toLowerCase();
        });
        return tagNames;
    }
};

может вернуть массив или элемент ... вызовет исключение, если один из выбранных элементов не имеет tagName ...

Frank Schwieterman 24.11.2009 21:45

Другие вопросы по теме